Vil*_*lx- 361 cookies dns rules http path
由于我遇到了奇怪的域/子域cookie问题,我想知道浏览器如何处理cookie.如果他们以不同的方式做到这一点,那么了解差异也会很好.
换句话说 - 当浏览器收到cookie时,该cookie可能有一个域和一个附加到它的路径.或者不是,在这种情况下,浏览器可能会替换它们的一些默认值.问题1:他们是什么?
稍后,当浏览器即将发出请求时,它会检查其cookie并过滤掉它应该为该请求发送的cookie.它通过将它们与请求路径和域匹配来实现.问题2:匹配规则是什么?
我问这个的原因是因为我对一些边缘情况感兴趣.喜欢:
.example.com可供使用www.example.com?.example.com可供使用example.com?example.com可供使用www.example.com?example.com可供使用anotherexample.com?www.example.com能够设置cookie中example.com?www.example.com能够设置cookie中www2.example.com?www.example.com能够设置cookie中.com?新增2:
此外,有人可以建议我应该如何设置一个cookie,以便:
www.example.com或设置example.com;www.example.com和两个都可以访问example.com.Gum*_*mbo 348
虽然现在应该定义cookie 的RFC 2965(Set-Cookie2已经废弃的RFC 2109),但是大多数浏览器并不完全支持它,而只是遵守Netscape的原始规范.
Domain属性值和有效域之间存在区别:前者取自Set-Cookieheader字段,后者是该属性值的解释.根据RFC 2965,以下内容应适用:
.则将由客户端添加).拥有有效域后,它还必须与当前请求的域进行域匹配以进行设置; 否则cookie将被修改.同样的规则适用于选择要在请求中发送的cookie.
将这些知识映射到您的问题,以下内容应适用:
Domain=.example.com 将在www.example.com上提供Domain=.example.com 将可用于example.comDomain=example.com将被转换为.example.com并因此将也可用于www.example.comDomain=example.com将不适用于anotherexample.com要为www.example.com和example.com设置和读取cookie .www.example.com,请.example.com分别设置和.但是第一个(.www.example.com)只能访问该域下的其他域(例如foo.www.example.com或bar.www.example.com),其中.example.com也可以访问example.com以下的任何其他域(例如foo). example.com或bar.example.com).
Zho*_*gYu 113
以前的答案有点过时了.
RFC 6265于2011年发布,基于当时的浏览器共识.从那以后,公共后缀域出现了一些复杂化.我写了一篇文章解释当前的情况 - http://bayou.io/draft/cookie.domain.html
总结一下,有关cookie域的规则:
Cookie 的原始域是原始请求的域.
如果原始域是IP,则不得设置cookie的域属性.
如果未设置cookie的域属性,则cookie仅适用于其原始域.
如果设置了cookie的域属性,
可以推导出cookie始终适用于其原始域.
cookie域不应该有一个前导点,就像在.foo.com- 简单地使用foo.com
举个例子,
x.y.z.com可以设置cookie域本身或父母- ,x.y.z.com,.y.z.com z.com但不是com,这是一个公共后缀.y.z.com适用于y.z.com,x.y.z.com,a.x.y.z.com等.公共后缀的例子- ,com,edu,uk,,co.ukblogspot.comcompute.amazonaws.com
对于RFC2965的内容进行广泛的覆盖审查.当然,这并不一定意味着所有浏览器的行为都完全相同.
但是,一般情况下,如果cookie中没有指定默认路径,则规则是Set-Cookie标头到达的URL中的路径.类似地,域的默认值是Set-Cookie到达的URL中的完整主机名.
域的匹配规则要求cookie域与正在进行请求的主机匹配.Cookie可以通过include*指定更广泛的域匹配.在Set-Cookie的域属性中(浏览器可能会有所不同).匹配路径(假设域匹配)是一个简单的事情,请求的路径必须在cookie上指定的路径内.通常会话cookie使用path = /或path =/applicationName /设置,因此cookie可用于进入应用程序的所有请求.
*我现在无法对此进行测试,但我有一个暗示,至少IE7/6会像对待路径example.com那样对待 它.example.com.
此问题的最后一个(确切地说是第三个)RFC是RFC-6265(已淘汰RFC-2965,而后者又淘汰了RFC-2109)。
根据它,如果服务器忽略了Domain属性,则用户代理将cookie仅返回到原始服务器(给定资源所在的服务器)。但这同时也警告某些现有用户代理将缺少的Domain属性视为存在Domain属性并包含当前主机名(例如,如果example.com返回不带Domain属性的Set-Cookie标头,则这些用户代理会也会将Cookie错误地发送到www.example.com)。
指定了Domain属性后,它将被视为完整的域名(如果属性中有前导点,它将被忽略)。服务器应匹配属性中指定的域(具有完全相同的域名或作为其子域)以获取此cookie。更准确地说是在这里指定的。
因此,例如:
Domain=.example.com等效于Domain=example.comDomain=www.example.com将关闭www4.example.com的方式PS:“域”属性中的尾部逗号将导致用户代理忽略该属性=(
我在 2019 年最新的 Chrome、Firefox、Safari 中测试了所有案例。
对补充的回应:
| 归档时间: |
|
| 查看次数: |
197337 次 |
| 最近记录: |