在设置安全值之后或之前重新生成会话ID

时间:2016-08-06 00:05:36

标签: php

关于何时致电session_regenerate_id(),这是一个非常具体的问题。在会话中设置安全值之前或之后调用session_regenerate_id()之间是否存在差异或安全风险。

在设定值之前:

if ($login_success) {

    session_regenerate_id(true);
    $_SESSION['login_status'] = 'logged_in';

}

或者在会话中设置值后:

if ($login_success) {

    $_SESSION['login_status'] = 'logged_in';
    session_regenerate_id(true);

}

2 个答案:

答案 0 :(得分:2)

这是它的工作原理,session_regenerate_id()将创建和更改会话ID,将会话转移到新文件并发送cookie。将true作为参数传递也将删除旧的会话文件,省略该参数将保留它。

那么,你是否使用

session_regenerate_id(true);
$_SESSION['login_status'] = 'logged_in';

$_SESSION['login_status'] = 'logged_in';
session_regenerate_id(true);

它是相同的:信息被重写到新文件并且cookie被发送出去。我建议尽管使用true作为参数,以避免旧的会话劫持。

答案 1 :(得分:1)

它们实际上是一样的;会话信息实际上仅在调用session_write_close()时(或在脚本结束时隐式)持久化。因此旧数据库不会保留数据。