Unset переменная сеанса не работает при предотвращении двойной подачи
Я пытаюсь запретить пользователю дважды отправлять форму, если он дважды нажимает кнопку, используя приведенный ниже код.
// 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'])
не похоже на работу. По второму запросу токен все еще находится в сеансе. Я думаю, это потому, что значение сеанса не очищается перед следующей отправкой.
В этом случае ответ на аналогичный вопрос: /questions/17645279/problema-sbrosa-peremennoj-seansa/17645298#17645298 session_write_close()
предлагается, и я думаю, что добавить его после того, как мой unset работает, но я не совсем понимаю, что он делает:
// Valid submission - Invalidate token
unset($_SESSION['token']);
session_write_close();
Два вопроса:
- Есть ли проблемы с этим решением?
- Могу ли я получить и установить переменные сеанса после вызова session_write_close()?
Благодарю.
Может быть, уместно, я использую ADOdb для хранения данных сеанса в базе данных
1 ответ
Стараться сделать:
$_SESSION['token'] = null;
Иногда unset()
не вступает в силу немедленно.