python - django检测用户在另一个选项卡中登录

标签 python django csrf django-csrf

django 中是否有,如果用户有两个打开的选项卡,都已注销,然后在一个选项卡中登录,则告诉他已在另一个选项卡中登录?我的意思是像 github 这样的东西告诉你你已经登录,请刷新页面。

现在的问题是,如果我在一个选项卡中登录,然后在第二个选项卡中登录,则会出现 csrf token Missing 错误。

最佳答案

你得到csrf token missing incorrect.因为当用户重新登录时,服务器会为 cookie 生成一个新的 csrf token 。 cookie 在同一域中持续存在。当您尝试在当前页面上执行某些操作时,请求会失败,因为 <form> 中存在 csrf与已更改的 cookie 不同。这就是 github 刷新页面(而不是继续执行请求)的原因。这样服务器就会以 html 形式将新的 csrf 返回到您的表单。

编辑:

考虑以下选择:

  • 如果您的 cookie 不是只读的: .设置setInterval您可以在其中检查用户加载页面的 session 以及来自 cookie 的当前 session 。
  • 渲染页面的前 4 个字符并将其保存到变量中。页面加载时设置此变量。每个请求都会传递带有 header 的变量。添加middleware它检查 headers 中的前 4 个字符是否与 cookie 中的前 4 个字符匹配,以及是否不告诉客户端刷新页面。
  • 如果您想自动检测您的情况,您需要经常向服务器发送垃圾邮件并询问 session 是否已更改。从客户端,您可以发送旧 session 和新 session (如果 session 是只读的,您可以从服务器发送一些第一个字符)。

关于python - django检测用户在另一个选项卡中登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345862/

相关文章:

python - Django csrf token 丢失或不正确错误 403

c# - JSON POST 的 ASP.Net MVC CSRF 预防

python - scipy.optimize.curve_fit 无法拟合曲线

python - JSON 序列化器在 Django 中不起作用

python - 使用 python 脚本加载 python 解释器

django 根据 UserProfile.language() 字段数据发送本地化电子邮件

mysql - 来自 Django select_for_update 的锁定记录是否受更新值的影响

python - 如何使用 ensure_csrf_cookie?

python - 如何连接具有公共(public)列值的行?

处理标量或数组的 Python 函数