あなたが試みていることをする必要はありません。PHP で session_start() を使用してセッションを開始すると、一意の SESSIONID が既に生成されています。これをフォームに入れるべきではありません。デフォルトでは、Cookie を介して処理されます。SESSIONID もチェックする必要はありません。これも処理されます。
ユーザーを認証し、認証された ID を保存する責任があります (たとえば、$_SESSION['user_id'] = $userId を SESSION に保存します。ユーザーがログアウトすると、session_destroy でセッションを破棄します。
session_start() が、サイト内のすべてのページの最初のものの 1 つであることを確認する必要があります。
以下に基本的な例を示します。
<?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;
}
編集:元の質問を誤解しました。フォーム ハッシュを生成および検証するために、上記の関連するメソッドを追加しました。
次のリソースを参照してください。