PHP -不允许跨子域会话


PHP - Do not allow sessions across subdomains

好的,我正在做的一个项目遇到了问题。我有一个网站与多个子域。然而,我已经设置每个子域是它自己的托管帐户(这意味着它有它自己的托管用户等)。现在,我不希望cookie跨域共享。一个域是注册域(http://signup.mydomain.com),一个是登录域(http://login.mydomain.com)。然而,在他们注册后(在注册子域上),我想强制他们在"登录子域"上登录。

在firefox中一切正常。但由于某些原因,ie浏览器在从一个子域到另一个子域时没有创建新的会话。它仍然试图读取旧的会话文件…但这不会起作用,因为会话文件由注册用户拥有…不是登录用户。因此,我得到一个错误:打开(/tmp/sess_91757a42a3b0ff0415e07ac62e603790, O_RDWR)失败:权限被拒绝(13),这当然是有意义的,因为文件所有权问题。

现在,我不能弄清楚的是如何强制internet explorer在两个子域之间启动一个新的会话,并将它们视为独立的站点(就像它们在技术上一样)。

下面是我尝试过的没有成功的代码:

上的注册子域:

session_set_cookie_params(0, '/', 'signup.mydomain.com'); 
session_start();  

登录子域:

session_set_cookie_params(0, '/', 'login.mydomain.com'); 
session_start();  

然后我也试了:

session_destroy();
$old_sessionid = session_id();
session_regenerate_id();
session_start();  

最后,我尝试了上面的不同变体,以及这个(在session_start()之前):

ini_set('session.cookie_domain', 'signup.mydomain.com' );

好了,我想我知道是怎么回事了。我只是在浏览网站的另一个问题时偶然发现了它。根域使用的是带有防弹安全pro安全模块的wordpress。结果是,默认情况下,他们拒绝HEAD请求,在。htaccess文件中:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]

它应该在那里阻止垃圾邮件和垃圾邮件机器人,但显然这导致了I.E.不释放会话的问题。只要我把"HEAD"去掉,饼干就开始按它们应该的方式工作了。