我已经对Django的cookie做了一段时间的研究。
然而,我不明白以下几点。
SESSION_COOKIE_DOMAIN在django中的默认设置是None,因此域属性将为空。
Django在会话中间件中设置会话cookie
response.set_cookie(
# ...
domain=settings.SESSION_COOKIE_DOMAIN,
) 如果域是set_cookie,则响应对象的相关部分函数为None,这是Django中的默认设置:
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,就会看到以下内容:
我认为设置一个没有前面的点的cookie域是无效的。为什么Django不使用.example.com
如果cookie域是example.com,它基本上是相同的,因为它将产生与前面的点相同的行为吗?
3.)我是否正确地理解了,如果我在example.com (没有www)上设置了一个cookie,该cookie也将在所有子域上可用,而且目前不可能只在子域上不可用的主域上设置cookie。
发布于 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。
正确的。
https://stackoverflow.com/questions/53349940
复制相似问题