我想创建基于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
答案 0 :(得分:0)
您遇到的问题部分与Django有关,但首先与HTTP Cookie机制本身的属性有关。
对路径有效的cookie对其所有子路径也有效(查询字符串无关紧要)。因此,idProduct
的{{1}} Cookie对last_visit
也有效。有关匹配机制的细节,定义cookie是否适合路径,请参阅RFC6265中的subsection“5.1.4。路径和路径匹配”。
因此,两个cookie都被发送,并且它们在/
HTTP标头中列出的顺序是从更具体的路径到更不具体的路径。请参阅RFC6265中的over here。
现在,Django逐个处理来自标头的cookie并填充普通的python字典/view2/
,在密钥已经存在时重写值。这就是当两个路径的两个cookie都在http请求中发送时,Cookie:
的值被重写的方式。
虽然Django处理这样的cookie,虽然仅保留密钥的第一个(不是最后一个)值与更具体的路径相关更合理,但您可以通过仅使用相同的cookie名称来解决问题对于同一级别的路径 - 适用于request.COOKIES
和last_visit
,但不适用于/root/view1/
。或者您可以转移关于http路径的cookie名称:
/root/view2/