2014-01-09 54 views
3

我已經閱讀了PHP維基這個代碼,但我不相信它實際上是將保護是否在會話中存儲session_id是防止會話攻擊的有效方法?

Login code fragment: Code that adds session ID as validation key. 

session_destory(); 
session_regenerate_id(); 
$_SESSION['valid_id'] = session_id(); 

低於該驗證部分是什麼,我不知道:

Validation code: Code other than login. Check if session is properly initilized. 

if ($_SESSION['valid_id'] !== session_id()) { 
    die('Invalid use of session ID'); 
} 

因爲SESSION_ID( )返回當前會話的session_id,爲什麼session_id()與給定的登錄會話中的$ _SESSION ['valid_id']不同?

有人可以解釋,如果上述代碼是有效的?

感謝

回答

2

默認情況下,PHP的基於文件的會話處理器使用會話ID作爲會話數據存儲在文件名的一部分。存儲本身就有些多餘了會話數據內的ID。

最好的代碼片段只會驗證會話是否已由您自己的代碼正確初始化,而不僅僅是一些隨機會話以某種方式附加到此用戶。但是,您存儲在會話中的任何鍵/值對都可用於此 - 它不必是會話標識。例如檢查此:

$_SESSION['everything is ok'] = "Yay, it's working" 

會一樣好。