将session_id存储在会话中是一种防止会话攻击的有效方法吗?

时间:2014-01-09 17:18:27

标签: php session

我已经在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']?

有人可以解释上述代码是否有效?

由于

1 个答案:

答案 0 :(得分:2)

默认情况下,PHP的基于文件的会话处理程序使用会话ID作为存储会话数据的文件名的一部分。在会话数据本身内存储ID会有些多余。

最好的代码片段只是验证会话是否由您自己的代码正确初始化,而不仅仅是某个随机会话以某种方式附加到此用户。但是您在会话中存储的任何键/值对都可以用于此 - 它根本不必是会话ID。例如检查这个:

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

会一样好。