我已经建立了一个用户登录的网站。 现在,出于某种原因,当我从网站的IP和网站的域中输入时,会创建一个不同的会话。
在网站中我使用了一个名为:ROOT的全局参数:
define("HOST", "localhost/final-project-management-system");
define("ROOT", "http://".HOST."/");
我在网站上提供了很多与ROOT
相关的链接。
当我尝试连接到IP时,会创建一个初始会话,但当我移动到涉及ROOT
的其中一个页面时,会创建一个新会话并删除旧会话。
有谁知道为什么会这样?
谢谢..
答案 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()吗?