Django中的路径特定Cookie

时间:2018-02-14 13:22:34

标签: django cookies cookie-path

我想创建基于cookie的身份验证取决于路径, 所以只是为了测试我分别创建了两个视图并设置了cookie

查看1 Cookie使用globalLy enter image description here 查看2 具有特定的Cookie

enter image description here

但两个视图中的问题只有全局cookie可用

查看1 enter image description here

查看2 enter image description here

您可以看到两个cookie具有相同的名称但路径不同,但是当我们获取cookie时,只有全局cookie可用

如果我显示request.META.get(' HTTP_COOKIE'))那么所有的Cookie都会显示但不会显示在request.COOKIES.get(' last_visit')

enter image description here

请帮助,我已经在php中测试过,它运行正常,但不是在python django

1 个答案:

答案 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.COOKIESlast_visit,但不适用于/root/view1/。或者您可以转移关于http路径的cookie名称:

/root/view2/