0

我正在创建一个登录脚本,当我想登录用户时,我需要知道我应该将 session_regenerate_id() 函数放在哪里。我这样做的方式是这样的:

    $user_id = $general->login($username, $password);

$_SESSION['user_id'] = $user_id;

登录函数基本上返回表中用户的自动增量 id,我将其存储在 $_SESSION 变量中,如上所示。我只展示了使用 Session 变量的逻辑部分,因为我只知道应该将 session_regenerate_id 放在哪里以避免会话固定攻击。在我赋值之前还是之后?

像这样:

    session_regenerate_id(true); 

$_SESSION['user_id'] = $user_id;

或者之后,像这样:

$_SESSION['user_id'] = $user_id;

    session_regenerate_id(true); 

谢谢你。

4

2 回答 2

3

没关系,只要您在与在会话中存储用户 ID 相同的请求中执行此操作(适用标准限制,例如,如果您不缓存输出,则不允许在执行 session_regenerate_id 之前打印任何字符) . 无论你怎么称呼它,它都会阻止其他人使用旧的会话 id 来访问存储了 user_id 的会话。

于 2013-05-24T22:33:44.260 回答
0

会话管理基础

在将身份验证信息设置为 $_SESSION 之前,必须调用 session_regenerate_id()。

所以,你必须把它放在 $_SESSION 之前。

于 2020-08-26T07:00:13.590 回答