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.com
为example.com的所有子域设置一个cookie,但这不是我想要的.
如何为子域设置cookie?我没有在子域的请求中看到cookie.
Gum*_*mbo 45
没有. 除此之外(请参阅下面的更新)cookie将被拒绝:fuu.example.com
是一个无效的域值(它必须以a开头.
,即.fuu.example.com
)
为防止可能的安全性或隐私侵犯,如果满足以下任何条件,则用户代理拒绝cookie(不得存储其信息):
- 请求主机是完全限定的域名(不是IP地址),其格式为HD,其中D是Domain属性的值,H是包含一个或多个点的字符串.
请求主机是example.com
,域属性值是foo.example.com
.但该请求主机example.com
不具有形式HD其中d会foo.example.com
.因此cookie被拒绝.
更新 当前规范RFC 6265(上面引用的废弃的RFC 2109)确实忽略了前导点.但有效域的处理方式相同:
[...]如果Domain属性的值为"
example.com
",则在向example.com,www.example.com和 www.corp.example.com发出HTTP请求时,用户代理将在Cookie标头中包含cookie .(请注意,前导%x2E(".
")(如果存在)将被忽略,即使该字符不被允许,但尾随的%x2E(".
")(如果存在)将导致用户代理忽略该属性.)[...]用户代理将接受来自foo.example.com的域属性为"
example.com
"或"foo.example.com
" 的cookie,但用户代理不接受域属性为" "或" " 的cookie .bar.example.com
baz.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
归档时间: |
|
查看次数: |
77967 次 |
最近记录: |