я создаю токен для моей формы, как это:
/*** 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; ?>" />
но когда я отправляю страницы и сравниваю токен, он дает мне другой идентификатор токена. кто-нибудь может сказать мне, что я делаю что-то не так?
Убедитесь, что вы только (повторно) генерируете токен, если форма еще не отправлена.
<?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..
}
Попробуйте зайти на ваш сайт в окне инкогнито. Если это работает, вам нужно удалить все файлы cookie вашего браузера и другие плагины сайта, потому что ваша сессия была кэширована. Он пытается сопоставить сессии с более раннего времени.