我遇到一个问题,在特定 View 请求上,用户返回 AnonymousUser。
这是由我用来收款的 JavaScript 库引起的。该 javascript 库创建一个 cookie,使 django 将登录用户视为 AnonymousUser。
如果我删除该 cookie,django 会看到用户已登录,但经过几次刷新后,我会得到一个新的 cookie,它再次使登录用户成为 AnonymousUser。
我仅在该库插入到页面中的一个特定页面中遇到此问题。
有什么问题吗?
最佳答案
javascript in question设置名为 mistertango[collect][mt_fp]
的 cookie。
当 cookie 被定义时(我猜是 RFC 6265 ),它们似乎并没有真正指定您可以在 cookie 名称中使用哪些字符,除了基本的“文本”。
这会导致解析 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,也看不出它的用途。)
关于javascript - 登录的用户是特定 View 上的 AnonymousUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787545/