在PHP登录脚本中放置session_regenerate_id()的位置


Where to put session_regenerate_id() in a login script in PHP

我正在创建一个登录脚本,我需要知道在哪里我应该把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之前