我正在创建一个登录脚本,我需要知道在哪里我应该把session_regenerate_id()函数,当我想登录用户。我是这样做的:
$user_id = $general->login($username, $password);
$_SESSION['user_id'] = $user_id;
log in函数基本上返回表中用户的自动增量id,我将其存储在$_SESSION变量中,如上所示。我只展示了我使用Session变量的部分逻辑,因为我只知道应该在哪里放置session_regenerate_id以避免会话固定攻击。在我赋值之前还是之后?
一样:
session_regenerate_id(true);
$_SESSION['user_id'] = $user_id;
或之后,像这样:
$_SESSION['user_id'] = $user_id;
session_regenerate_id(true);
谢谢。
没关系,只要您在会话中存储用户id的同一请求中这样做(适用标准限制,例如:如果不缓存输出,则不允许在执行session_regenerate_id)之前打印任何字符。无论如何调用它,它都将阻止其他人使用旧的会话id访问存储有user_id的会话。
From Session Management Basics:
session_regenerate_id()必须在设置$_SESSION.
所以,你必须把它放在$_SESSION之前