有沒有必要做你正在嘗試什麼。當您使用session_start()以PHP開始會話時,已經爲您生成了唯一的SESSIONID。你應該而不是把這個表格。它默認通過cookie處理。也不需要檢查SESSIONID,這也是爲您處理的。
你是負責認證用戶和存儲其認證身份(如:$ _SESSION [「USER_ID」] = $在SESSION用戶ID。如果用戶註銷你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;
}
編輯:我誤會了原來的問題。我添加了上面的相關方法來生成和驗證表單散列;
請參閱以下資源:
FYI MD5是比較有限的,如果你需要生成一個隨機字符串,我建議你用這個來代替:$ ID = SHA1(mt_rand());如果您使用RAND()你只能得到有32000種可能的組合。 – TravisO 2010-01-09 18:08:06
相關:http://stackoverflow.com/questions/5111007/does-php-have-an-authenticity-token-like-rails – baptx 2016-08-09 17:50:46