Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何改变Django';s cookie域设置是否会导致偶发的CSRF故障?_Python_Django_Cookies_Csrf - Fatal编程技术网

Python 如何改变Django';s cookie域设置是否会导致偶发的CSRF故障?

Python 如何改变Django';s cookie域设置是否会导致偶发的CSRF故障?,python,django,cookies,csrf,Python,Django,Cookies,Csrf,在我的Django项目中,直到最近我还没有设置SESSION\u COOKIE\u DOMAIN和CSRF\u COOKIE\u DOMAIN。最近我把它们改成了.mydomain.com,从那以后,我一直看到某些用户在AJAX请求中偶尔出现CSRF故障。故障表现为403,日志中出现CSRF令牌缺失或不正确。 要求用户清除cookies似乎可以解决这个问题,但我想知道设置更改是如何导致这一问题的,以及为什么它似乎只发生在一些用户身上,而不是其他用户身上 想知道是否有办法解决这些问题而不要求我的用

在我的Django项目中,直到最近我还没有设置
SESSION\u COOKIE\u DOMAIN
CSRF\u COOKIE\u DOMAIN
。最近我把它们改成了
.mydomain.com
,从那以后,我一直看到某些用户在AJAX请求中偶尔出现CSRF故障。故障表现为403,日志中出现
CSRF令牌缺失或不正确。

要求用户清除cookies似乎可以解决这个问题,但我想知道设置更改是如何导致这一问题的,以及为什么它似乎只发生在一些用户身上,而不是其他用户身上


想知道是否有办法解决这些问题而不要求我的用户清除cookie。

带有新的
会话\u cookie\u域的cookie将作为新cookie发送,而不会替换旧cookie。因此,浏览器会将这两个信息发送到您的服务器。AFAICT,它以任意顺序发送它们

这意味着您正在为
.mydomain.com
设置一个cookie,但是接收到您刚刚为
.mydomain.com
设置的cookie,或者是为
最初隐式设置的任何东西设置的陈旧cookie(因为django只会选择一个,很可能是最后一个看到的)。哪一个取决于浏览器,可能取决于客户端计算机如何存储它们的一些细节,甚至可能取决于django如何读取标题。这就是失败不一致的原因:它对某些客户端随机工作,而对其他客户端则失败

编辑:如果您知道原始cookie的属性,可以从服务器中删除过时的cookie。最好的方法可能是设置一个自定义
set Cookie
头,并设置域和其他属性,以及过去的过期日期。您可以这样做,例如从403页处理程序。
(请参阅和)

我不知道答案,但文档中指出这可能会导致问题:“在生产站点上更新此设置时要小心。如果更新此设置以在以前使用标准域Cookie的站点上启用跨域Cookie,则现有用户Cookie将设置为旧域。这可能会导致他们无法登录,只要这些cookie持续存在。”这确实是问题所在。我们通过在基本模板中添加一个JS代码片段来解决问题,该代码片段将过期cookie设置为
Domain=
,从而有效地使旧cookie无效。