【问题标题】:Session ID restarts after changing URL from "www." to non-"www."从“www”更改 URL 后会话 ID 重新启动。到非“www”。
【发布时间】:2020-04-20 14:55:15
【问题描述】:

我注意到 php 中的 cookie 会话 ID 在将您的 url 从 www 更改后发生了变化。到非 www。例如,从“https://mathtutortime.com/account”到https://www.mathtutortime.com/account”。

如果我从“https://mathtutortime.com/login”重定向到“https://www.mathtutortime.com/account”,我正在设置会话 ID:

https://mathtutortime.com/login 我设置了一个会话变量并重定向:

$_SESSION["username"] = $username;
$_SESSION['loggedin'] = true;
header("Location: ../account");
    <?php
    session_start();

    echo session_id();
    echo "       ";
    if($_SESSION['loggedin'])
    {
    echo "You are logged in! Our site is still under construction, but it's growing quickly!<br><br>Please click one of the two buttons if you want tutoring, or if you want to be a tutor at the bottom of the screen.<br><br>";
    }
    ?>

现在,如果我在浏览器中从“https://mathtutortime.com/account”更改为https://www.mathtutortime.com/account”,我注意到我的会话 ID 从 u5ns3nna7ntp7kbekkkk71afn6 更改为 pqrna7ntp7dsbkkkk71afn6。

我仍然能够输出消息,因为我设置了 $_SESSION['loggedin']。但是,我的问题与如果有人这样做,会话 ID 会更改这一事实有关。如果用户可以这样做,这是否会带来任何安全风险?

谢谢,

【问题讨论】:

    标签: php cookies session-cookies session-variables


    【解决方案1】:

    不,这不是安全风险。默认情况下,域和子域之间不共享会话 cookie,这就是您看到创建新会话的原因。

    我通常建议人们选择他们想要使用的域/主机名(例如 domain.com 或 www.domain.com),并在用户首次访问该页面时使用代码或重写来强制所有用户使用该特定路径。这样就不会那么混乱和混乱了。

    但是,如果您不希望这样并且只是希望跨子域共享会话 cookie,则可以在调用 session_start 之前执行此操作:

    session_set_cookie_params(0, '/', '.yourdomainhere.com');

    请注意,如果存在您无法控制的其他子域,则在这样的子域之间共享会话 cookie 可能会带来安全风险。

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 2019-03-09
      • 2011-11-05
      • 2013-12-20
      • 2014-12-16
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      相关资源
      最近更新 更多