IP 和域创建不同的会话


IP and domain create different session

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

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

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

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

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

有谁知道为什么会这样?

谢谢。。

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

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

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

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

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

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

>您是否在会话中尝试过var_dump()

var_dump($_SESSION);

你在 PHP 的顶部启动 session_start()