Почему значение в $_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 шт):
Немного переписал код, но вопрос всё равно актуален: Почему переменная $_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));
}
Вот такой банальный камень под водой от джуна)
Сталкивался с такой проблемой давно при получении кода капчи. Код записывался в сессию и при нажатии на кнопку отправки формы введённый код с картинки выдавал ошибку, мол капча не верна. И как оказалось значение капчи в переменной сессии было на шаг в переди вводимого кода в инпут, а картика выдавала именно предыдущий код. Банальщина, но уверен большинство новичков столкнуться с этой темой.