我有一个问题,在特定的视图request.user返回AnonymousUser。
这是由我用来收取付款的JavaScript库引起的。该javascript库创建一个cookie,使django将登录用户视为AnonymousUser。
如果删除该cookie,django会将用户视为已登录,但经过几次刷新后,我会获得一个新的cookie,使登录的用户再次成为AnonymousUser。
我只在一个特定的页面中出现此问题,该页面中插入了该库。
任何想法有什么不对?
答案 0 :(得分:2)
javascript in question按名称mistertango[collect][mt_fp]
设置Cookie。
当定义了cookie时(RFC 6265,我猜)似乎他们没有真正指定允许在cookie名称中使用哪些字符,除了基本上“text”。
这会导致解析cookie名称时出现一些问题。 Django依赖于Python的http.cookies,似乎http.cookies不允许在cookie名称中使用括号。 http.cookie很难解析带有括号的cookie对,并且在此之后不解析对,这意味着它没有看到它用于身份验证的sessionid
cookie。
我无法判断Django / http.cookie是否应该支持此功能。 PHP does however似乎支持它(即使它被破坏了),而Ruby on Rails does not。 简单的解决方案是仅使用Cookie名称中的字母数字字符。
对于您的情况,最佳解决方案是让javascript作者更改其Cookie名称。如果那是不可能的,或者同时,您可以自己托管javascript并更改副本中的cookie名称。 (如果将cookie用于此JavaScript代码段以外的内容,则可能无效,但我并不理解Javascript并且看不到它的用途。)