子域的域集cookie

时间:2011-03-10 10:07:57

标签: http cookies setcookie

我查了许多关于cookies的问题,但我找不到问题的答案。我有以下情况:

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

Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly 

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

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

3 个答案:

答案 0 :(得分:43)

没有。 此外fuu.example.com是一个无效的值(它必须以.开头,即.fuu.example.com(请参阅下面的更新) cookie would get rejected

  

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

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

请求主机为example.com属性值为foo.example.com。但请求主机example.com的格式不是 HD ,其中 D 将是foo.example.com。因此cookie被拒绝了。


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

  

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

     

[...]用户代理将接受带有的cookie      来自“example.com”或“foo.example.com”的域属性       foo.example.com ,但用户代理不接受带有的Cookie      域名属性为“bar.example.com”或“baz.foo.example.com”。

答案 1 :(得分:8)

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

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

Set-Cookie: name=value

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

Set-Cookie: name=value; domain=example.com

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

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

总结,如果你设置一个类似于example.com上面第二个例子的cookie,foo.example.com可以访问它,反之亦然。

有关详情:https://stackoverflow.com/a/23086139/5466401

答案 2 :(得分:0)

实际上,在原始域和子域之间共享 cookie 有一种简单且完全跨浏览器的支持方式,但您应该在设置时间共享它,以便在我使用的浏览器中轻松处理 cookie 内容js-cookie使用以下设置 cookie,它可以在原始域及其所有子域之间共享:

Cookie.set('key', 'value', { domain: '.domain.com' })

// a . added before domain name

提示:添加此 . 将与所有子域共享 cookie。