【问题标题】:what means these examples about session fixation?这些关于会话固定的例子是什么意思?
【发布时间】:2013-01-05 00:08:32
【问题描述】:

第一个例子

<?php
session_start();

if(!isset($_SESSION['count'])) $_SESSION['count'] = 0;
else ++$_SESSION['count'];

echo $_SESSION['count'] . "<br />";
?>

第二个例子

<?php
session_start();
if(!isset($_SESSION['initiated']))
{
    session_regenerate_id();
    $_SESSION['initiated'] = 1;
}
if(!isset($_SESSION['count'])) $_SESSION['count'] = 0;
else ++$_SESSION['count'];

echo $_SESSION['count'] . "<br />";

我发现唯一不同的是,如果我使用两个不同的 URL(例如:http//localhost/test?PHPSESSID=123;http//localhost/test?PHPSESSID=456),第一个脚本将从零开始重新计数,但第二个会继续计数

那么两个例子是什么意思?它想告诉我什么?

【问题讨论】:

  • 这些脚本之间的唯一区别是session_regenerate_id() 块。您是在问为什么这会改变脚本的行为?
  • 是的,我不明白这些脚本的结果,当我添加 session_regenerate_id() 时,$_SESSION['count'] 仍在计数中

标签: php session-fixation


【解决方案1】:

对不起,我的第一个回答太仓促了。检查This。 PHP.net 说:

"session_regenerate_id() 会将当前会话id替换为新的,并保留当前会话信息。"

【讨论】:

  • session_regenerate_id() 只是重命名会话 id 并保持所有会话变量不变。
  • 如果脚本执行 session_regenerate_id() 时 $_SESSION['count'] 变量被重置,为什么 $_SESSION['count'] 不再从零开始计数?
【解决方案2】:

session_regenerate_id() 如果可以,将提交一个 cookie 以保留会话详细信息。 将其视为用户的扩展会话。这样,如果用户关闭浏览器,就可以重新调用用户会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2013-05-09
    • 2016-10-12
    • 2012-10-29
    • 2013-02-18
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多