在php中的子域上共享会话
我在两个子域之间共享会话时遇到问题,我在这里和其他地方读过很多线程 我有www.xx.com和sub.xx.com,我已经设置了在php中的子域上共享会话,php,session,subdomain,Php,Session,Subdomain,我在两个子域之间共享会话时遇到问题,我在这里和其他地方读过很多线程 我有www.xx.com和sub.xx.com,我已经设置了 session_name("PHPSESSXX"); session_set_cookie_params(0, '/', '.xx.com'); 两个域上的session.save_路径相同 我在两个域上都得到一个名为PHPSESSXX的cookie,它的值相同 当我登录www.xx.com时,我会得到一个包含一些详细信息的会话,它一直保持这种状态,直到我转到sub
session_name("PHPSESSXX");
session_set_cookie_params(0, '/', '.xx.com');
两个域上的session.save_路径相同
我在两个域上都得到一个名为PHPSESSXX的cookie,它的值相同
当我登录www.xx.com时,我会得到一个包含一些详细信息的会话,它一直保持这种状态,直到我转到sub.xx.com。然后sub.xx.com上的会话是空的,如果我刷新www.xx.com,那里的会话也会消失。所以它做了一些事情,但每次我访问不同的子域时,它似乎都会覆盖会话数据
有什么想法吗我能调试一下吗
顺便说一句:我在两个域上都使用ssl
欢呼声PHP会话ID保存在cookie中。要使cookie在所有子域中可用,需要将其分配给根域。然后所有子域都将从cookie中获取会话id,PHP可以使用传递的会话id找到会话 事实证明,您只需要将session.cookie_域设置为php.ini文件中的根域 session.cookie_domain=“.example.com” 另外,请检查手册中用于设置ini条目的不同方法 这里回答了你的问题
我的解决方案是在
.htaccess
中设置一个标志,如下所示:
php_flag "suhosin.session.cryptdocroot" 0
现在它工作得很好;o)
问题是系统上安装了Suhosin,ini变量
suhosin.session.cryptdocroot = On
以这样的方式对会话文件进行加密,当其他子域试图更改会话时,出于安全原因,它会删除所有内容
在ini文件中将变量设置为Off或[nothing]对我来说不起作用,尽管我可能没有找到正确的文件
我也尝试过在PHP中设置它,但没有任何运气。像这样:
ini_set('suhosin.session.cryptdocroot', 0)
干杯您的代码似乎是正确的,您是否在
会话\u开始之前设置了此设置
?第一个明显的调试提示是查找浏览器的开发人员工具,并检查cookie值是否保持不变。如果可以的话,您可能是无意中删除了会话数据。可能的重复我已经检查了所有(我相信)假定的重复项,但没有找到答案。我在会话_开始之前设置它,并且没有删除任何会话值。无论如何,我的php脚本中没有。这正是我所做的,如上所述。我尝试了不同的方法来设置ini设置。cookie_域工作正常,但会话无法跨域工作。我已经阅读了顶部的主题,但这不起作用,就像你建议的那样。。。似乎我必须继续寻找。。。;o)