如何指定子域名?
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所做的)。