2

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

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

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

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

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

有谁知道为什么会这样?

谢谢 ..

4

3 回答 3

6

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

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

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

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

于 2012-08-06T22:36:41.907 回答
1

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

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

于 2013-11-18T10:40:50.297 回答
0

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

var_dump($_SESSION);

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

于 2012-08-06T22:37:33.383 回答