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();

Два вопроса:

  1. Есть ли проблемы с этим решением?
  2. Могу ли я получить и установить переменные сеанса после вызова session_write_close()?

Благодарю.

Может быть, уместно, я использую ADOdb для хранения данных сеанса в базе данных

1 ответ

Стараться сделать:

$_SESSION['token'] = null;

Иногда unset() не вступает в силу немедленно.

Другие вопросы по тегам