Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中的子域上共享会话_Php_Session_Subdomain - Fatal编程技术网

在php中的子域上共享会话

在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

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

我有www.xx.com和sub.xx.com,我已经设置了

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)