我在两个子域之间共享会话时遇到问题,我在这里和其他地方读过很多帖子。
我有www.xx.com和sub.xx.com,我已经设置了
session_name("PHPSESSXX");
session_set_cookie_params(0, '/', '.xx.com');
并且两个域上的session.save_path都相同。
我在两个域上都获得了一个名为PHPSESSXX的cookie,它具有相同的值。
当我登录www.xx.com时,我会收到包含其中一些详细信息的会话,并且在我访问sub.xx.com之前一直保持这种状态。然后sub.xx.com上的会话是空的,如果我刷新www.xx.com,那么会话就会消失。所以它做了一些事情,但是每当我访问不同的子域时,它似乎都会覆盖会话数据。
任何想法? - 我能以某种方式调试吗?
顺便说一句:我在两个域都使用ssl。
欢呼声
答案 0 :(得分:0)
PHP会话ID保存在Cookies中。要在所有子域中提供cookie,您需要将其分配给根域。然后所有子域都将从cookie获取会话ID,PHP可以使用传递的会话ID找到会话。
事实证明,你只需要将session.cookie_domain设置为php.ini文件中的根域
session.cookie_domain =“。example.com” 另请参阅手册以了解用于设置ini条目的不同方法。
你的问题在这里得到解答
答案 1 :(得分:0)
我的解决方案是在.htaccess
中设置一个标志,如下所示:
php_flag "suhosin.session.cryptdocroot" 0
它现在完美无缺; o)
问题是Suhosin安装在系统上,而ini变量
suhosin.session.cryptdocroot = On
以这种方式加密会话文件,当一个不同的子域尝试更改会话时,出于安全原因,它删除了所有内容。
我无法在ini文件中将变量设置为Off或[nothing],但可能找不到正确的文件。
我也尝试过在PHP中设置它而没有任何运气。像这样:
ini_set('suhosin.session.cryptdocroot', 0)
欢呼声