没有必要做你正在尝试的事情。当您使用session_start()在 PHP 中启动会话时,已经为您生成了唯一的 SESSIONID。你不应该把它放在表格上。默认情况下,它通过 Cookie 进行处理。也无需检查会话ID,这再次为您处理。
您负责对用户进行身份验证并存储其经过身份验证的身份(例如,$_SESSION['user_id'] = 会话中的$userId。如果用户注销,则使用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;
}
编辑:我误解了原来的问题。我添加了上面用于生成和验证表单哈希的相关方法;
请参阅以下资源: