如何阻止用于子域的域cookie?

时间:2011-09-14 08:52:44

标签: cookies override subdomain

我有以下域名的设置:

mydomain.com

www.mydomain.com

有一个问题(在Internet Explorer上测试过): 如果为mydomain.com设置了一些cookie,即使我为www.mydomain.com设置了一个同名的cookie,这个cookie对www.mydomain.com也有效。

更具体的考生:

1)用户在网站mydomain.com上选择他喜欢的语言并设置cookie usrlng = en

2)第二天,其他人使用同一台计算机,导航到www.mydomain.com并选择他的语言,然后设置usrlng = de。但是Internet Explorer不断向服务器发送cookie usrlng = en和usrlng = de(我在Fiddler中看到了这个)!为什么它会两次发送相同的cookie,而不是用子域值覆盖'usrlng'?

同时我看到PHPSESSID正在被子域正确覆盖,没有两个PHPSESSID cookie被发送到服务器。

如何修复usrlng cookie并使其工作方式与PHPSESSID相同?

2 个答案:

答案 0 :(得分:2)

您还可以为每个...设置不同的save_path,以便它们不共享会话。 PHP示例:

$subdomain = array_shift(explode('.',$_SERVER['HTTP_HOST']));

ini_set('session.save_path','D:\website_sessions\'.$subdomain.'\');

ini_set('session.save_path','D:\website_sessions\'.$subdomain.'\');

PHP需要访问在sessions目录中写入。

答案 1 :(得分:1)

现在我通过设置cookie的'host'而不是'domain'来解决问题; 'host'属性允许将cookie限制为mydomain.com或www.mydomain.com。

也许这是唯一的方法,“域名”无法设置为超级顶级域名Cookie。