2012-08-06 45 views
2

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

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

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

我给很多的网站相关链接ROOT

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

有没有人有任何想法,为什么会发生这种情况?

谢谢..

+1

'http:// www.host.com'不等于'http:// host.com'。这很可能是你的问题 – 2012-08-06 22:35:03

回答

6

PHP会话是基于饼干的范围,以及你所描述的行为究竟是如何工作的。

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

如果您考虑一下,那么在考虑共享主机环境时,将Cookie作用域基于已解析的IP地址可能会导致在站点之间发生Cookie泄漏的重大问题。

为了正确有这个工作,用户必须通过要么 DNS名称的IP地址,但不能同时访问该站点。你可以手动传递会话ID来解决这个问题,但它不会被推荐(不是由我,无论如何)。

0

你试试var_dump()会话?

var_dump($_SESSION); 

启动在session_start()在PHP的顶部?

1

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

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