子域的域设置 cookie
Posted
技术标签:
【中文标题】子域的域设置 cookie【英文标题】:Domain set cookie for subdomain 【发布时间】:2011-07-12 14:27:30 【问题描述】:我查看了很多关于 cookie 的问题,但没有找到关于我的问题的答案。我有以下情况:
用户在 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
设置一个 cookie,也可以为 example.com 的所有子域设置 cookie,但这不是我想要的。
如何为子域设置 cookie?我没有在对子域的请求中看到 cookie。
【问题讨论】:
【参考方案1】:没有。 除了(参见下面的更新)cookie would get rejected:
fuu.example.com
是一个无效的域 值(它必须以.
开头,即.fuu.example.com
)
为防止可能的安全或隐私侵犯,如果以下任何一种情况属实,用户代理将拒绝 cookie(不应存储其信息):
请求主机是完全限定域名(不是 IP 地址),格式为 HD,其中 D 是 域的值 属性,H 是一个包含一个或多个点的字符串。
请求主机为example.com
,域属性值为foo.example.com
。但是请求主机example.com
不具有HD 形式,其中D 将是foo.example.com
。因此 cookie 被拒绝。
更新 当前规范 RFC 6265(已废弃上面引用的 RFC 2109)确实忽略了前导点。但有效域的处理方式相同:
[…] 如果 Domain 属性的值为 “
example.com
”,用户代理会将cookie包含在Cookie中 向 example.com、www.example.com 和 www.corp.example.com。 (请注意,如果存在前导 %x2E (".
"), 即使该字符是不允许的,也会被忽略,但是 尾随 %x2E (".
"),如果存在,将导致用户代理忽略 属性。)[...] 用户代理将接受一个带有 “
example.com
”或“foo.example.com
”的域属性来自 foo.example.com,但用户代理不会接受带有 “bar.example.com
”或“baz.foo.example.com
”的域属性。
【讨论】:
【参考方案2】:example.com
和 foo.example.com
2 个域只能在 Set-Cookie 标头中明确指定域的情况下共享 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://***.com/a/23086139/5466401
【讨论】:
在foo1.example.com
和foo2.example.com
之间共享cookie 怎么样?如果没有foo3.example.com
得到它,这可能吗?
你有相同的解决方案吗@DushyantBangal
@PranavBilurkar 来自我所做的研发,服务器只能为自己设置一个适用于foo2.example.com
或其通配符子域适用于*.foo2.example.com
的cookie。
@PranavBilurkar ...所以要实现我所提到的,必须在foo1.example.com
和foo2.example.com
上调用API,然后它们将设置各自的cookie。
实际上我的问题是“我有 7 个带有 .example.com
的站点,它们在所有站点上共享 cookie,我想排除在 media.example.com
上共享 cookie【参考方案3】:
实际上,有一种简单且完全跨浏览器支持的方式来在原始域和子域之间共享 cookie,但您应该在设置时间共享它,以便在我使用 js-cookie
的浏览器中轻松处理 cookie 内容并使用以下设置cookie可以在原始域及其所有子域之间共享:
Cookie.set('key', 'value', domain: '.domain.com' )
// a . added before domain name
提示:添加此.
将与所有子子域共享 cookie。
【讨论】:
以上是关于子域的域设置 cookie的主要内容,如果未能解决你的问题,请参考以下文章
我在 info.plist 中的 NSAppTransportSecurity 设置不适用于所有已定义的域和子域
javascript 在子域/读取cookie之间设置javascript cookie