1
我想阻止用户双提交表单,如果他们单击按钮两次使用下面的代码。取消设置会话变量不工作时,防止双重提交
// 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'])
似乎没有工作。在第二个请求中,令牌仍在会话中。我认为这是因为会话值在下次提交之前没有被清除。
在这种resepnse一个类似的问题:https://stackoverflow.com/a/1025919/1587851session_write_close()
建议,我想后,我的没有设置正在增加,但我真的不明白它做什么:
// Valid submission - Invalidate token
unset($_SESSION['token']);
session_write_close();
两个问题:
- 这个解决方案有什么问题吗?
- 我可以在调用session_write_close()后仍然获取并设置会话变量吗?
谢谢。
可能是相关的,我使用ADOdb的会话数据存储在数据库中
您是否在页面的开头放置了“session_start()”? –
@ mArm.ch是的,它只是不在上面的代码片段。 – paul