1

我有一个在页面加载并将该令牌写入文件时创建的安全令牌。然后我确认表单中传递的令牌与文件中的令牌之一匹配。

第一部分位于 FORM.PHP 文件中,我可以确认令牌正在写入该文件。

//Create Token
$token = md5(time());

//Save token to file
$fp = fopen('/PATH/tokens.txt', 'a') or die ("Unable to open to Token file");
fwrite($fp, "$token\n") or die ("Unable to write to Token file");
fclose($fp);

这部分代码位于 PROCESS.PHP 文件中。我已打印出 $tokens 数组的内容,并且可以手动确认其中是否存在相同的令牌。

$tokens = file('/PATH/tokens.txt') or die("Unable to read file");

$token = $_POST['token'];

if (in_array($token, $tokens)){
   error_log("Found Token");
} else {
   error_log("Token Not Found");
}

我无法弄清楚为什么该in_array($token, $tokens)函数没有返回 TRUE。

4

3 回答 3

2

使用file('/path/file.ext',FILE_IGNORE_NEW_LINES);,否则每个条目都会附加文件中的换行符。

于 2013-10-17T23:29:27.360 回答
2

file() 默认保留换行符,这意味着您将 md5() 匹配到 md5()\n。

要去除换行符,您需要将 FILE_IGNORE_NEW_LINES 作为第二个参数传递给 file()

于 2013-10-17T23:29:44.653 回答
0

文件函数将返回一个带有换行符的数组

于 2013-10-17T23:33:26.097 回答