Я пытаюсь добавить токены CSRF в свои формы. Проблема заключается в том, что когда я добавляю его в файл, я выхожу из токена сеанса, и он совпадает с токеном во входном имени с именем «токен». Но когда я отправляю страницу и использую Token :: check, она возвращает false, и если я выхожу из значения токена из ввода и сеанса снова, я вижу, что значение сеанса изменилось, но входное значение оставалось неизменным.Изменение переменной сеанса при отправке формы.
<?php
class Token{
public static function generate(){
return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
}
public static function check($token){
if(isset($_SESSION['token']) && $token == $_SESSION['token']){
unset($_SESSION['token']);
return true;
}else{
return false;
}
}
}
?>
Адрес этой страницы: php для управления формой.
$token = $_POST['token'];
if(Token::check($token)){ //Continue with more code }
Ниже приводится часть формы, которая имеет дело с лексем:
<input type="hidden" name="user_id_update" value="<?php echo $user_info[0][0]->id; ?>"/>
<input type="hidden" name="time_update" value="<?php echo $time; ?>"/>
<input type="hidden" name="token" value="<?php echo Token::generate(); ?>"
<hr />
<div class="form-group">
<input type="submit" id="submit_update" value="Update" class="btn btn-success"/>
</div>
Если кто-то может пролить некоторый свет на это я очень ценю это, как я искал в Интернете для часов сейчас и не может найти ответ. Благодарю.
Основываясь на вашем примере кода и объяснении, я не вижу ничего плохого. Что-то еще происходит, что не было предоставлено, что делает его полной гадательной игрой. –