在php中的子域上共享会话

时间:2013-11-20 09:02:49

标签: php session subdomain

我在两个子域之间共享会话时遇到问题,我在这里和其他地方读过很多帖子。

我有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。

欢呼声

2 个答案:

答案 0 :(得分:0)

PHP会话ID保存在Cookies中。要在所有子域中提供cookie,您需要将其分配给根域。然后所有子域都将从cookie获取会话ID,PHP可以使用传递的会话ID找到会话。

事实证明,你只需要将session.cookie_domain设置为php.ini文件中的根域

session.cookie_domain =“。example.com” 另请参阅手册以了解用于设置ini条目的不同方法。

你的问题在这里得到解答

Sharing SESSION Variables Between Multiple Subdomains

答案 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)

欢呼声