子域的域集cookie

Jar*_*rus 44 cookies http setcookie

我查看了很多关于cookie的问题,但我没有找到关于我的问题的答案.我有以下场景:

用户在example.com上创建登录,并且应该获得cookie,但仅限于子域fuu.example.com.我生成以下HTTP标头部分:

Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly 
Run Code Online (Sandbox Code Playgroud)

但是当我向https://fuu.example.com发出请求时,cookie将不会添加到请求中.我想知道example.com是否有可能设置cookie fuu.example.com.我知道example.com也可能.example.comexample.com的所有子域设置一个cookie,但这不是我想要的.

如何为子域设置cookie?我没有在子域的请求中看到cookie.

Gum*_*mbo 45

没有. 除此之外fuu.example.com是一个无效的值(它必须以a开头.,即.fuu.example.com)(请参阅下面的更新)cookie将被拒绝:

为防止可能的安全性或隐私侵犯,如果满足以下任何条件,则用户代理拒绝cookie(不得存储其信息):

  • 请求主机是完全限定的域名(不是IP地址),其格式为HD,其中DDomain属性的值,H是包含一个或多个点的字符串.

请求主机是example.com,属性值是foo.example.com.但该请求主机example.com不具有形式HD其中dfoo.example.com.因此cookie被拒绝.


更新     当前规范RFC 6265(上面引用的废弃的RFC 2109)确实忽略了前导点.但有效域的处理方式相同:

[...]如果Domain属性的值为" example.com",则在向example.com,www.example.comwww.corp.example.com发出HTTP请求时,用户代理将在Cookie标头中包含cookie .(请注意,前导%x2E(" .")(如果存在)将被忽略,即使该字符不被允许,但尾随的%x2E(" .")(如果存在)将导致用户代理忽略该属性.)

[...]用户代理将接受来自foo.example.com的域属性为" example.com"或" foo.example.com" 的cookie,但用户代理不接受域属性为" "或" " 的cookie .bar.example.combaz.foo.example.com


Sib*_*lil 11

2个域example.com,foo.example.com如果在Set-Cookie标头中明确命名域,则只能共享cookie.否则,cookie的范围仅限于请求主机.

例如,如果您从以下位置发送以下标头foo.example.com:

Set-Cookie: name=value
Run Code Online (Sandbox Code Playgroud)

然后,cookie不会被发送给请求example.com.但是,如果您使用以下内容,它将在两个域上都可用:

Set-Cookie: name=value; domain=example.com
Run Code Online (Sandbox Code Playgroud)

在RFC 2109中,没有前导点的域意味着它不能在子域上使用,只有前导点(.example.com)允许它跨子域使用.

但是,现代浏览器遵循较新的规范RFC 6265,并且将忽略任何前导点,这意味着您可以在子域和顶级域上使用cookie.

总之,如果你设置一个像上面第二个例子那样的cookie example.com,它就可以被访问foo.example.com,反之亦然.

有关更多详细信息,请访问:https://stackoverflow.com/a/23086139/5466401

  • 如何在`foo1.example.com`和`foo2.example.com`之间共享cookie?没有`foo3.example.com`可以获得它吗? (4认同)