【问题标题】:How to tell if a django DB-based session has expired in browser?如何判断基于 django DB 的会话是否在浏览器中过期?
【发布时间】:2018-01-05 23:19:26
【问题描述】:

我目前在我的 django 应用程序中使用默认的数据库支持会话模型。前端是一个与 REST API 交互的 SPA,并具有异步登录功能,因此用户在会话超时时不会丢失页面。我正在尝试检测浏览器中的会话何时超时,以便显示登录模式。

但是:

  • 如果User 不再被授权执行 API 请求 因为他们不再登录,所以他们得到一个 HTTP403。
  • 如果User 尝试访问属于其他Users 的对象实例, 他们还获得了 HTTP403。

所以我需要区分这两个 403。我的直觉是比较sessionid cookie 和now 的到期时间,但是:

  1. cookie 是httpOnly
  2. 到期未设置

因此我的问题是:如何在浏览器中判断我的 django 会话是否已过期?

【问题讨论】:

  • 当用户没有被授权时你可以 HTTP401 和 HTTP403 如果用户试图访问属于其他用户的对象实例
  • 这不是你要问的,但我认为你最好使用 JWT 而不是会话。它更适合 REST API,您可以定期刷新令牌,并且可以在 Javascript 中对令牌进行解码以检索到期时间,因此您可以在不发出 HTTP 请求的情况下检查它是否已过期。如果您使用的是 Django REST 框架,则使用 JWT 很简单。
  • 我将接受 401 答案,因为这是我提出的问题的答案,但我同意令牌会更好。谢谢!

标签: django session cookies


【解决方案1】:

根据标准,HTTP401 用于未经授权的访问。您可以在此处找到有关 HTTP401 的更多信息。 https://httpstatuses.com/401

【讨论】:

  • 这与 OP 的要求完全无关。您提供的最后一步是发送 401,这是正确的,但不是答案
猜你喜欢
  • 2012-08-23
  • 2010-10-12
  • 2016-12-05
  • 2012-11-26
  • 2013-02-09
  • 2010-09-25
  • 2018-04-27
  • 2012-04-28
  • 2011-06-01
相关资源
最近更新 更多