IP和域创建不同的会话

时间:2012-08-06 22:32:42

标签: php session web session-cookies

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

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

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

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

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

有谁知道为什么会这样?

谢谢..

3 个答案:

答案 0 :(得分:6)

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

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

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

为了使此工作正常,用户必须通过 DNS名称​​或访问网站,而不是两者。您可以手动手动传递会话ID以解决此问题,但不建议这样做(不管是在我看来,无论如何)。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

var_dump($_SESSION);

你在php的顶部开始 session_start()吗?