关于何时致电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);
}
答案 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()时(或在脚本结束时隐式)持久化。因此旧数据库不会保留数据。