PHP会话子域之间越来越复位(PHP session is getting reset betwee

2019-06-26 12:55发布

我有两个子域,两者都需要登录(基于相同的DB访问凭据)运行的网站。 为了让用户更容易,我想改变它,使他们能够浏览这两个子域,而无需分别登录:基本上,他们在其中一个子域登录,就可以自由地一侧和另一之间进行导航。

一个解决方案,我发现在允许PHP的会议进行到子域涉及改变session.cookie_domain变量来使所有子域将共享会话变量,但有些事情似乎是错误的。 我仍然可以登录在subdomain1和浏览它,但只要我从subdomain2加载页面,subdomain1瞬间失去了所有的会话数据,我带回到登录页面。 这也恰好周围的其他方法(在第一次从subdomain2登录)。 在此之前的变化,子域可以同时登录,但他们不会“看到”对方。

这可能是导致出现这个问题呢?

Answer 1:

我疑是suhoshin项目的会话加密功能 ,该补丁集包括在大多数基于Debian的系统。 它可以被配置为在会话文件与从各种来源产生的密钥内容进行编码,以保护该会话内容从相同的机器上运行(共享主机)或其他PHP脚本会话劫持。 其中一名消息人士是文档根目录 (默认启用),这通常是在每个子域的不同。

检查是否安装了

一个简单phpinfo()将报告的延伸和它的设置,找了块命名suhosin再下面看看suhosin.session.encryptsuhosin.session.cryptdocroot

禁用加密

显然,如果你有访问服务器,您可以编辑你的php.ini禁用整个加密或仅部分文档根目录。

如果不这样做,并在服务器运行的Apache,请尝试禁用它.htaccess你的PHP应用程序的根像这样的文件:

php_flag "suhosin.session.cryptdocroot" 0

如果它的工作,你应该看到的phpinfo()输出的差异。 (本地值列)

如果你的主机不允许.htaccess文件,你可以设置在PHP中的同一个变量,但它的重要前做session_start() 希望你有某种前端控制器来把这个英寸

ini_set('suhosin.session.cryptdocroot', 0);
phpinfo();

所述phpinf的输出应该与在.htaccess方法,用“关”本地值cryptdocroot线。



文章来源: PHP session is getting reset between subdomains