Может кто-нибудь взглянуть на мои две функции ниже и предложить, что я могу сделать?Я создал две функции, которые в основном создают уникальный ключ, и он отображается в скрытом поле формы, а затем сразу после того, как я проверяю, была ли отправлена форма, вторая функция проверяет, соответствует ли ключ в скрытом поле ключу.в сеансе.
Проблема, с которой я сталкиваюсь сейчас и снова, просто перенаправляет меня на запрещенную страницу, предлагая, чтобы ключи не совпадали, хотя я не редактировал ключ формы преднамеренно, используя мои инструменты веб-разработки Firefox.для проверки.
Я не уверен, что это проблема с кешем или нет, может кто-нибудь увидеть, есть ли что-то, что я пропускаю или могу улучшить?Это происходит только время от времени, например, если я отправляю форму несколько раз, она может просто перейти на запрещенную страницу, которая предполагает, что ключ в скрытом поле не соответствует ключу в сеансе, хотя я не вижу ничего плохого в моих двухфункции.
Вот моя первая функция, она создает уникальный ключ, который отображается в скрытом поле формы.У меня также есть ограничение по времени, в течение которого пользователь должен отправить форму, но я прокомментировал это на данный момент, потому что, кажется, это происходит чаще, когда включено.
function GenerateFormTokenHash($token)
{
$token = $_SESSION['token'] = md5(uniqid(mt_rand(), true));
//$token_time = $_SESSION['token_time'] = time();
return htmlspecialchars($token);
//return $token_time;
}
Чтобы использовать функцию выше, япросто echo GenerateFormTokenHash ($ token);в скрытом вызываемом токене.
Функция ниже используется сразу после того, как я проверяю, была ли отправлена форма.
# Form Token Hash Validator
function IsValidFormTokenHash()
{
/*global $websiteaddress;
$token_age = time() - $_SESSION['token_time'];
if($token_age >= 300) {
echo 'Session Expired';
echo 'This form has now expired. ';
echo 'Please click here to go back to the form.';
$_SESSION = array();
setcookie(session_name(), '', time()-42000, '/');
# Destroy the session
session_destroy();
# Generate new seesion id
session_regenerate_id(true);
exit;
}*/
if(isset($_POST['token']) && $_POST['token'] != $_SESSION['token'] || !isset($_POST['token']) || !isset($_SESSION['token']))
{
$_SESSION = array();
setcookie(session_name(), '', time()-42000, '/');
# Destroy the session
session_destroy();
# Generate new seesion id
session_regenerate_id(true);
redirect("/error/forbidden.php");
exit;
}
}
Опять же, эта функция находится в моем файле functions.php, поэтому после того, как ячтобы проверить, была ли отправлена форма, я просто вызываю функцию следующим образом:
if(isset($_POST['submit'])) {
IsValidFormTokenHash();
}
Так что я в основном пытаюсь понять, почему иногда время от времени он просто думает, что сеансовый ключ и ключ в скрытом поле не совпадают, может быть проблема с кешем или что я могу сделать, чтобы убедиться, что он работает нормально?