我为我的表单生成一个令牌:
/*** set a form token ***/
$token = md5( uniqid(rand(), true) );
/*** set the session form token ***/
$_SESSION['form_token'] = $token;
并将隐藏的输入放在我的表单中:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
但是当我提交页面并比较令牌时,它会给我一个不同的令牌ID。谁能告诉我我做错了什么?
答案 0 :(得分:0)
如果表单尚未提交,请确保仅(重新)生成令牌。
<?php
// Process request OR show form..
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
// check if we receive a token
if(isset($_POST['form_token']))
{
// compare the token
if($_POST['form_token'] === $_SESSION['form_token'])
{
// do the magic here...
unset($_SESSION['form_token']);
} else {
die('No token match');
}
} else {
die('No token found');
}
} else {
$token = md5( uniqid(rand(), true));
$_SESSION['form_token'] = $token;
// print form with hidden token..
}
答案 1 :(得分:0)
尝试在隐身窗口中访问您的网站。如果这样做,您需要删除所有浏览器&#39; Cookie和其他网站插件,因为您的会话已被缓存。它试图从较早的时间开始匹配会话。