为什么Chrome和Safari不能看到某些子域名的cookies?

3
我有一个网站,为example.com生成了一个cookie。在Firefox、Chrome 18和Safari中,可以在http://example.comhttp://www.example.com上访问。然而,在基于Webkit的浏览器中,无法从http://test.me.example.com访问该cookie。它在Firefox中有效。
我已经通过JavaScript测试了domain= example.com和.domain.com来设置cookie。
该cookie的路径为“ /”,并设置了过期时间。

是的,看了那个线程让我觉得Firefox是正确的,而Chrome和Safari则不能正常工作。就像我说的,一级子域名可以工作,但是两级就不行了。如果cookie被定义为.example.com,我希望www.example.com和something.wwww.example.com都能正常工作。我想知道为什么Chrome会出现这种情况,或者是否有解决方法。 - Lucas Holt
1个回答

0

如何指定子域名? Chrome 期望子域名的 cookie 前缀为点号 例如:domain=.example.com

您可能会发现这篇文章有用:https://serverfault.com/questions/153409/can-subdomain-example-com-set-a-cookie-that-can-be-read-by-example-com

引用同一RFC2109,您会看到:
从请求主机x.foo.com设置的Domain = .foo.com的Set-Cookie Cookie 将被接受。
因此,subdomain.example.com可以为.example.com设置Cookie。目前为止还不错。
以下规则适用于从用户代理中选择适用的cookie值:
域选择 源服务器的完全限定主机名必须与Cookie的域属性匹配。
所以我们是否有域匹配?
A是一个FQDN字符串,并具有NB形式,其中N是非空名称字符串,B具有.B'形式,B'是FQDN字符串。(因此,x.y.com匹配.y.com但y.com不匹配。) 但是现在example.com根据定义无法与.example.com匹配。但是www.example.com(或域中的任何其他“非空名称”)会匹配。这个RFC在理论上已经被RFC2965取代,后者对Set-Cookie2操作中强制使用域前导点的事情进行了规定。
更重要的是,正如@Tony所指出的那样,现实世界的影响。如果想了解真正的用户代理正在做什么,请参阅:
Firefox 3的nsCookieService.cpp和
Chrome的cookie_monster.cc
如果想了解实际站点正在做什么,请尝试使用wget并使用--save-cookies、--load-cookies和--debug来查看发生了什么。
您可能会发现,实际上大多数站点都在使用一些旧的RFC规范中的Set-Cookie与“Host”值的组合,隐含地没有前导点(如twitter.com所做的)或设置域值(带有前导点)并重定向到像www.example.com这样的服务器(如google.com所做的)。

正如原问题中所指出的,已尝试使用前导点。 - Lucas Holt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接