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