Django中的路径特定Cookie
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的路径特定Cookie相关的知识,希望对你有一定的参考价值。
我想创建基于cookie的身份验证取决于路径,所以只是为了测试我已分别创建两个视图和设置cookie
查看1 Cookie与globalLy可用查看2 Cookie与特定
但是这两个视图中的问题只有全局cookie可用
您可以看到两个cookie具有相同的名称但路径不同,但是当我们获取cookie时,只有全局cookie可用
如果我显示request.META.get('HTTP_COOKIE'))则显示所有cookie但不在request.COOKIES.get('last_visit')中
请帮助,我已经在php测试过,它工作正常,但不是在python django
您面临的问题部分与Django有关,但首先与HTTP cookie机制本身的属性有关。
对路径有效的cookie对其所有子路径也有效(查询字符串无关紧要)。因此,用于last_visit
的/
曲奇也适用于/view2/
。有关匹配机制的细节,定义cookie是否适合路径,请参阅RFC6265中的subsection“5.1.4。路径和路径匹配”。
因此,两个cookie都被发送,并且它们在Cookie:
HTTP头中列出的顺序是从更具体的路径到更不具体的路径。请参阅RFC6265中的over here。
现在,Django逐个处理来自标题的cookie并填充普通的python字典request.COOKIES
,当密钥已经存在时重写值。这就是当两个路径的两个cookie都在http请求中发送时,last_visit
的值被重写的方式。
虽然Django处理这样的cookie,但是只保留密钥的第一个(而不是最后一个)值更合理,因为它与更具体的路径有关,你可以通过仅使用相同的cookie名称修复问题。相同的水平 - 对于/root/view1/
和/root/view2/
,但不适用于/root/
。或者您可以转移关于http路径的cookie名称,如下所示:
import hashlib
cookie_name = 'last_visit%s' % hashlib.md5(request.path).hexdigest()
# ...
cookie = request.COOKIES.get(cookie_name)
# ...
response.set_cookie(cookie_name, cookie, path=request.path)
以上是关于Django中的路径特定Cookie的主要内容,如果未能解决你的问题,请参考以下文章