我有一个问题,在特定视图上request.user返回AnonymousUser。
这是由我用来收集付款的javascript库引起的。该javascript库制作了一个cookie,使django可以将登录用户视为AnonymousUser。
如果删除该cookie,django会将该用户视为已登录,但经过几次刷新后,我会得到一个新的cookie,它使登录用户再次成为AnonymousUser。
而且仅在该库插入页面的一个特定页面中存在此问题。
任何想法有什么问题吗?
有问题的javascript通过名称设置cookie mistertango[collect][mt_fp]
。
定义cookie时(我猜是RFC 6265),似乎它们实际上并没有真正指定允许在cookie名称中使用哪些字符,除了基本上是“文本”以外。
这在解析cookie名称时会引起一些问题。Django为此依赖Python的http.cookies,并且似乎http.cookies不允许在cookie名称中使用方括号。http.cookie无法解析其中带有括号的cookie对,并且此后不解析对,这意味着它看不到sessionid
用于身份验证的cookie。
我无法判断Django / http.cookie是否应支持此功能。但是, PHP似乎确实支持它(即使它已损坏),而Ruby on Rails则不支持。一种简单的解决方案是在cookie名称中仅使用字母数字字符。
对于您而言,最好的解决方案是让javascript作者更改其cookie名称。如果这是不可能的,或者与此同时,您可以自己托管javascript并更改副本中的cookie名称。(如果cookie用于该javascript代码段之外的内容,则可能无法正常工作,但我不太了解Javascript,也看不到它的用途。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句