我有两个子域,两者都需要登录(基于相同的DB访问凭据)运行的网站。 为了让用户更容易,我想改变它,使他们能够浏览这两个子域,而无需分别登录:基本上,他们在其中一个子域登录,就可以自由地一侧和另一之间进行导航。
一个解决方案,我发现在允许PHP的会议进行到子域涉及改变session.cookie_domain变量来使所有子域将共享会话变量,但有些事情似乎是错误的。 我仍然可以登录在subdomain1和浏览它,但只要我从subdomain2加载页面,subdomain1瞬间失去了所有的会话数据,我带回到登录页面。 这也恰好周围的其他方法(在第一次从subdomain2登录)。 在此之前的变化,子域可以同时登录,但他们不会“看到”对方。
这可能是导致出现这个问题呢?
我疑是suhoshin项目的会话加密功能 ,该补丁集包括在大多数基于Debian的系统。 它可以被配置为在会话文件与从各种来源产生的密钥内容进行编码,以保护该会话内容从相同的机器上运行(共享主机)或其他PHP脚本会话劫持。 其中一名消息人士是文档根目录 (默认启用),这通常是在每个子域的不同。
检查是否安装了
一个简单phpinfo()
将报告的延伸和它的设置,找了块命名suhosin
再下面看看suhosin.session.encrypt
和suhosin.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线。