我在两个子域之间共享会话时遇到问题,我在这里和其他地方读了很多线程。
我有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。
欢呼
PHP会话ID保存在Cookie中。要使cookie在所有子域中可用,您需要将其分配给根域。然后所有子域都会从cookie中获得会话id,PHP可以使用传递的会话id找到会话。
事实证明,您只需要在php.ini文件中将session.cokie_domain设置为根域
session.cookie_domain=".example.com"还可以查看手册中用于设置ini条目的不同方法。
您的问题在这里得到回答
在多个子域之间共享SESSION变量
我的解决方案是在.htaccess
中设置一个标志,如下所示:
php_flag "suhosin.session.cryptdocroot" 0
现在它运行得很完美;o)
问题是系统上安装了Suhosin,并且ini变量
suhosin.session.cryptdocroot = On
以这样一种方式加密会话文件,当不同的子域试图更改会话时,出于安全原因,它会删除所有内容。
在ini文件中将变量设置为Off或nothing对我来说不起作用,尽管可能我没有找到合适的文件。
我还试着用PHP设置它,但没有成功。像这样:
ini_set('suhosin.session.cryptdocroot', 0)
欢呼