首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的Cookie行为

问Django中的Cookie行为
EN

Stack Overflow用户
提问于 2018-11-17 09:35:48
回答 1查看 689关注 0票数 0

我已经对Django的cookie做了一段时间的研究。

然而,我不明白以下几点。

SESSION_COOKIE_DOMAIN在django中的默认设置是None,因此域属性将为空。

Django在会话中间件中设置会话cookie

代码语言:javascript
复制
response.set_cookie(
    # ...
    domain=settings.SESSION_COOKIE_DOMAIN,
) 

如果域是set_cookie,则响应对象的相关部分函数为None,这是Django中的默认设置:

代码语言:javascript
复制
if domain is not None:
    self.cookies[key]['domain'] = domain

因此,我假设cookie头中的域被省略了。

我读过这个关于曲奇的好文章和user2864740做了一个很好的结论

“当cookie中没有设置域时,cookie应该只匹配请求的确切主机名。没有子域,也没有部分匹配。

这意味着根本不包括域属性--设置空域属性是无效的。“

1.)如果域属性为空,或者我在这里看到了什么,为什么cookie仍然有效呢?

2.)让我们假设我拥有域example.com

我不修改django的默认设置,所以SESSION_COOKIE_DOMAIN是None

如果我检查域example.com的cookie,就会看到以下内容:

  • 名称: sessionid
  • 价值: XXXXXX
  • 主机: example.com

我认为设置一个没有前面的点的cookie域是无效的。为什么Django不使用.example.com

如果cookie域是example.com,它基本上是相同的,因为它将产生与前面的点相同的行为吗?

3.)我是否正确地理解了,如果我在example.com (没有www)上设置了一个cookie,该cookie也将在所有子域上可用,而且目前不可能只在子域上不可用的主域上设置cookie。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-17 11:13:24

( 1.)如果域属性为空,或者我在这里看到了什么,为什么cookie仍然有效呢?

您刚才指出的代码清楚地表明,响应中没有设置任何域;键根本不包括在内。无效的(更确切地说,是“未定义”)将包括键Domain,但忽略一个属性值。姜戈不会那样做的。

( 2.)我认为设置一个没有前面的点的cookie域是无效的。为什么Django不使用.example.com?

首先,你倒过来了。RFC 6265说,一个领先的点“不允许” (虽然它将被忽略,如果它在那里)。

其次,您所显示的cookie细节不包括Domain密钥。"Host“不是cookie属性;这大概只是Chrome告诉您cookie来自何处。

( 3.)我是否正确地理解了,如果我在example.com上设置了一个cookie (没有www),该cookie也将在所有子域上可用,而且目前不可能只在子域上不可用的主域上设置一个cookie。

正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53349940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档