没有必要做你正在尝试的事情。当您在 PHP 中使用 session_start() 启动会话时,已经为您生成了一个唯一的 SESSIONID。你不应该把它放在表格上。默认情况下通过 cookie 处理。也不需要检查 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;
}
编辑:我误解了原来的问题。我在上面添加了用于生成和验证表单哈希的相关方法;
请参阅以下资源: