我简直不敢相信这是很难确定的。
即使阅读了RFC,我也不清楚subdomain.example.com上的服务器是否可以设置可由example.com读取的cookie。
subdomain.example.com可以设置一个Cookie属性为.example.com的cookie。 RFC 2965似乎明确指出这样一个cookie不会被发送到example.com,但是同样地说,如果你设置了Domain = example.com,那么一个点就被预置了,就像你说的.example.com一样。 综合起来,这似乎是说,如果example.com返回设置一个cookies与Domain = example.com,它不会得到该cookies回! 那不可能是正确的。
任何人都可以澄清规则是什么?
从相同的RFC2109引用你读:
*来自请求主机x.foo.com的Domain = .foo.com的Set-Cookie会 被接受。
所以subdomain.example.com
可以为.example.com
设置一个cookie。 到现在为止还挺好。
以下规则适用于从中select适用的Cookie值 用户代理拥有的所有cookie中。 域select 原始服务器的标准主机名必须域匹配 Cookie的Domain属性
那么我们有一个域名匹配?
* A是FQDNstring,其格式为NB,其中N是非空名称 string,B的forms是.B',而B'是FQDNstring。 (所以,xycom 域名匹配.y.com,但不是y.com。)
但是现在example.com
根据定义不会与.example.com
域名匹配。 但www.example.com
(或域中的任何其他“非空名称”)会。 这个RFC在理论上已经被RFC2965废弃了, RFC2965指出了在Set-Cookie2
操作上强制领域的领域。
更重要的是,正如@托尼所指出的那样,是现实世界。 有关实际用户代理正在执行的内容,请参阅
Firefox 3的nsCookieService.cpp
和
Chrome的cookie_monster.cc
为了透视实际的网站正在做什么,尝试使用--load-cookies
使用--save-cookies
,– --load-cookies
和--debug
来查看正在发生的事情。
您可能会发现实际上大多数站点正在使用旧版RFC规范中的Set-Cookie
与“主机”值的组合,隐式地没有前导点(如twitter.com )或设置域值(带有前导点)并redirect到像www.example.com
这样的服务器(就像google.com一样)。
如果浏览器实现了RFC 6265 ,那么任何现代浏览器都应该在这一点上做,那么为.example.com
设置的cookie将忽略前导点(见第5.2.3节),然后将cookie发送给裸体域和所有子域。
如果您有来自较旧浏览器的大量stream量,请不要依赖此行为; 这个RFC只能到2011年。
这不应该是可能的。 但是,正如你所说,由于这不是一个广泛logging的标准,它取决于你使用的是什么软件。
大多数现代浏览器都遵循定义的“Web安全模型”。 该模型有效地pipe理浏览器在安全性方面的行为,例如cookie(特别是如何将它们发送回给定的网站)。 该模型还有一个规则,即“浏览器不会向没有设置Cookie的域名发送cookie”。
话虽如此,domain.com应该能够为js.domain.com设置cookie。 但是,js.domain.com只能为自己设置Cookie。 但这完全取决于您使用的浏览器。