Почему значение в $_SESSION на шаг впереди, чем $_POST

Почему при нажатии на кнопку, значения в переменных $_SESSION['TOKEN'] и $_POST['tok'] не равны?????????? var_dump выводит FALSE Помогите люди добрые!

$_SESSION['TOKEN'] = bin2hex(random_bytes(32));


<form>
    <input name="tok" value="<?=$_SESSION['TOKEN']?>">
    <button type="submit" name="save">Сохранить</button>
</form>


if (isset($_POST['save'])) {
    var_dump(hash_equals($_SESSION['TOKEN'], $_POST['tok']));
}

При нажатии на кнопку, в $_POST['tok'] находится предыдущее значение $_SESSION['TOKEN'] и поэтому при сравнении они не равны. Как такое происходит???


Ответы (2 шт):

Автор решения: Arasaki

Немного переписал код, но вопрос всё равно актуален: Почему переменная $_SESSION на шаг впереди $_POST. А сделал я код такой, может кому поможет и токен так же обновляется:

if (!$_SESSION['TOKEN']) $_SESSION['TOKEN'] = bin2hex(random_bytes(32));


<form>
    <input name="tok" value="<?=$_SESSION['TOKEN']?>">
    <button type="submit" name="save">Сохранить</button>
</form>


if (isset($_POST['save'])) {
    var_dump(hash_equals($_SESSION['TOKEN'], $_POST['tok']));
    $_SESSION['TOKEN'] = bin2hex(random_bytes(32));
}

Вот такой банальный камень под водой от джуна)

→ Ссылка
Автор решения: ARTISUC

Сталкивался с такой проблемой давно при получении кода капчи. Код записывался в сессию и при нажатии на кнопку отправки формы введённый код с картинки выдавал ошибку, мол капча не верна. И как оказалось значение капчи в переменной сессии было на шаг в переди вводимого кода в инпут, а картика выдавала именно предыдущий код. Банальщина, но уверен большинство новичков столкнуться с этой темой.

→ Ссылка