【问题标题】:IP and domain create different sessionIP 和域创建不同的会话
【发布时间】:2012-08-03 22:24:29
【问题描述】:

我已经建立了一个用户登录的网站。 现在,由于某种原因,当我从站点的 IP 和站点的域输入时,会创建一个不同的会话。

在网站中我使用了一个全局参数,命名为:ROOT where:

define("HOST", "localhost/final-project-management-system");
define("ROOT", "http://".HOST."/");

我在网站上给出了很多与ROOT相关的链接。

当我尝试连接到 IP 时,会创建一个初始会话,但当我移动到涉及 ROOT 的页面之一时,会创建一个新会话并删除旧会话。

有人知道为什么会这样吗?

谢谢..

【问题讨论】:

  • http://www.host.com 不等于 http://host.com。这很可能是你的问题

标签: php session web session-cookies


【解决方案1】:

PHP 会话基于 cookie 的范围,而您描述的行为正是它的工作原理。

cookie 的范围仅由基于浏览器地址栏中显示的主机名(或 IP)的字符串值定义。仅仅因为主机名解析为特定 IP,并不意味着它们共享 cookie。

如果您考虑一下,那么当您考虑共享托管环境时,将 cookie 范围基于解析的 IP 地址可能会导致站点之间 cookie 泄漏的重大问题。

为了使这项工作正常进行,用户必须通过任一 DNS 名称​​或 IP 地址访问站点,而不是两者。您可以手动传递会话 ID 来解决此问题,但不推荐(无论如何我不推荐)。

【讨论】:

    【解决方案2】:

    如果浏览器中的 URL 包含 IP 地址,并且 cookie 存储在浏览器中针对主机名或其父域,则 cookie 不会作为请求的一部分发送到那里,可能会导致新会话的创建。

    最佳实践是在服务器端设置规则,如果传入请求包含主机标头作为 IP 地址,则只需重定向到 URL 包含主机名/FQDN 的位置。当使用 ip 地址请求网站时,Google、Facebook 等网站将返回 302 重定向。

    【讨论】:

      【解决方案3】:

      您在会话中尝试过 var_dump() 吗?

      var_dump($_SESSION);
      

      你在 php 顶部启动 session_start() 吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-11
        • 2012-01-30
        • 2010-10-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 2013-07-02
        • 2011-02-05
        相关资源
        最近更新 更多