我正在尝试阻止用户使用以下代码点击按钮两次提交表单。
// Check token is present
if (!isset($_POST['token'])) {
// Token missing
exit();
}
// Check token matches session value
if ($_POST['token'] != $_SESSION['token']) {
// Token mismatch
exit();
}
// Valid submission - Invalidate token
unset($_SESSION['token']);
// Make payment
$result = makePayment(); // cURL request to api
问题是unset($_SESSION['token'])
似乎不起作用。在第二个请求中,令牌仍在会话中。我认为这是因为会话值在下次提交之前没有被清除。
在这个类似问题的问题中:建议使用https://stackoverflow.com/a/1025919/1587851 session_write_close()
,我认为在我未设置之后添加它是有效的,但我真的不明白它的作用:
// Valid submission - Invalidate token
unset($_SESSION['token']);
session_write_close();
两个问题:
感谢。
可能相关,我正在使用ADOdb在数据库中存储会话数据
答案 0 :(得分:0)
尝试:
$_SESSION['token'] = null;
有时,unset()
无法立即生效。