我有一个安全令牌,当页面加载并将该令牌写入文件时创建。然后我确认表单中传递的令牌与文件中的一个令牌匹配。
第一部分位于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。
答案 0 :(得分:2)
使用file('/path/file.ext',FILE_IGNORE_NEW_LINES);
,否则每个条目都会附加文件中的换行符。
答案 1 :(得分:2)
file()默认保留换行符,这意味着您将md5()与md5()\ n匹配。
要删除换行符,需要将FILE_IGNORE_NEW_LINES作为第二个参数传递给file()
答案 2 :(得分:0)
file函数将返回附加换行符的数组