Токен-сессия и пост-токен всегда отличаются, хотя от одного и того же параметра

я создаю токен для моей формы, как это:

/*** set a form token ***/
$token = md5( uniqid(rand(), true) );/*** set the session form token ***/
$_SESSION['form_token'] = $token;

и поместите скрытый ввод в мою форму следующим образом:

<input type="hidden" name="token" value="<?php echo $token; ?>" />

но когда я отправляю страницы и сравниваю токен, он дает мне другой идентификатор токена. кто-нибудь может сказать мне, что я делаю что-то не так?

0

Решение

Убедитесь, что вы только (повторно) генерируете токен, если форма еще не отправлена.

<?php
// Process request OR show form..
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
// check if we receive a token
if(isset($_POST['form_token']))
{
// compare the token
if($_POST['form_token'] === $_SESSION['form_token'])
{
// do the magic here...
unset($_SESSION['form_token']);
} else {
die('No token match');
}
} else {
die('No token found');
}
} else {
$token = md5( uniqid(rand(), true));
$_SESSION['form_token'] = $token;

// print form with hidden token..
}
0

Другие решения

Попробуйте зайти на ваш сайт в окне инкогнито. Если это работает, вам нужно удалить все файлы cookie вашего браузера и другие плагины сайта, потому что ваша сессия была кэширована. Он пытается сопоставить сессии с более раннего времени.

0