Я пишу приложение в PHP 7.3, где пользователи создают для отправки данных с помощью форм.Эти формы должны быть защищены с помощью CSRF.
Когда запрос сделан, я хочу сначала попытаться проверить токен CSRF ($ _SESSION против $ _POST или $ _GET) и сохранить результат в переменной.Затем я хочу сгенерировать новый токен и сохранить его в $ _SESSION.
Логика приложения состоит в том, чтобы проверять CSRF, генерировать новый CSRF, проверять, произведен ли POST и проверка прошла успешно, повторить несколько форм
Я попытался упростить код, но у меня есть доступ только к одному серверу, поэтому я не могу проверить, является ли это кодировкой или ошибкой сервера.
<?php
session_start();
echo $_SESSION["a"];
$validateCsrf = false;
if (!empty($_POST["a"]) && $_SESSION["a"] === $_POST["a"]) {
$validateCsrf = true;
}
$_SESSION["a"] = random_int(100000000,999999999);
echo $_SESSION["a"];
?>
Я ожидаю, что в результате этого сначала отобразится старый токен CSRF, а затем новый токен CSRF.Если вы перезагрузите страницу, второй токен должен «переместиться» на первое место, поскольку он становится старым, который проходит проверку, однако этого не происходит, есть какой-то другой вывод.
Пример вывода:
209959590 576642097
534067777 374285992
Ожидаемый результат:
209959590 576642097
576642097 374285992
Что я делаю не так?