Нет необходимости делать то, что вы пытаетесь. Когда вы начинаете сеанс в PHP с помощью session_start (), для вас уже генерируется уникальный SESSIONID. Вы должны не указывать это в форме. По умолчанию он обрабатывается через куки. Также нет необходимости проверять SESSIONID, который снова обрабатывается для вас.
Вы несете ответственность за аутентификацию пользователя и сохранение его аутентифицированной личности (например, $ _SESSION ['user_id'] = $ userId в SESSION. Если пользователь выходит из системы, вы уничтожаете его сеанс с помощью session_destroy.
Вы должны убедиться, что session_start () является одной из первых вещей для всех страниц вашего сайта.
Вот базовый пример:
<?php
session_start(); // starts new or resumes existing session
session_regenerate_id(true); // regenerates SESSIONID to prevent hijacking
function login($username, $password)
{
$user = new User();
if ($user->login($username, $password)) {
$_SESSION['user_id'] = $user->getId();
return true;
}
return false;
}
function logout()
{
session_destroy();
}
function isLoggedIn()
{
return isset($_SESSION['user_id']);
}
function generateFormHash($salt)
{
$hash = md5(mt_rand(1,1000000) . $salt);
$_SESSION['csrf_hash'] = $hash
return $hash;
}
function isValidFormHash($hash)
{
return $_SESSION['csrf_hash'] === $hash;
}
Редактировать: я неправильно понял исходный вопрос. Я добавил соответствующие методы выше для генерации и проверки хэшей форм;
Пожалуйста, смотрите следующие ресурсы: