我已经在php wiki上阅读了这段代码,但我不相信它实际上是在添加保护
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']?
有人可以解释上述代码是否有效?
由于
答案 0 :(得分:2)
默认情况下,PHP的基于文件的会话处理程序使用会话ID作为存储会话数据的文件名的一部分。在会话数据本身内存储ID会有些多余。
最好的代码片段只是验证会话是否由您自己的代码正确初始化,而不仅仅是某个随机会话以某种方式附加到此用户。但是您在会话中存储的任何键/值对都可以用于此 - 它根本不必是会话ID。例如检查这个:
$_SESSION['everything is ok'] = "Yay, it's working"
会一样好。