Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在浏览器中判断基于django DB的会话是否已过期?_Django_Session_Cookies - Fatal编程技术网

如何在浏览器中判断基于django DB的会话是否已过期?

如何在浏览器中判断基于django DB的会话是否已过期?,django,session,cookies,Django,Session,Cookies,我目前正在django应用程序中使用默认的数据库支持会话模型。前端是一个SPA,它与RESTAPI接口,并具有异步登录,这样用户在会话超时时不会丢失页面。我试图在浏览器中检测会话何时超时,以便显示登录模式 然而: 如果用户不再被授权执行API请求 因为他们不再登录,他们得到了一个HTTP403 如果用户试图访问属于其他用户的对象实例, 他们还得到了一个HTTP403 所以我需要区分这两个403。我的直觉是比较sessionidcookie和now的过期时间,但是: cookie是httpOn

我目前正在django应用程序中使用默认的数据库支持会话模型。前端是一个SPA,它与RESTAPI接口,并具有异步登录,这样用户在会话超时时不会丢失页面。我试图在浏览器中检测会话何时超时,以便显示登录模式

然而:

  • 如果用户不再被授权执行API请求 因为他们不再登录,他们得到了一个HTTP403
  • 如果
    用户
    试图访问属于其他
    用户的对象实例
    , 他们还得到了一个HTTP403
所以我需要区分这两个403。我的直觉是比较
sessionid
cookie和
now
的过期时间,但是:

  • cookie是
    httpOnly
  • 未设置有效期

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

    根据标准,HTTP401用于未经授权的访问。你可以在这里找到更多关于HTTP401的信息。

    当用户未经授权时,您可以使用HTTP401;如果用户试图访问属于其他用户的对象实例,您可以使用HTTP403。这并不是您想要的,但我认为您最好使用JWT而不是会话。它更适合RESTAPI,您可以定期刷新令牌,并且可以用Javascript解码令牌以检索到期时间,因此您可以在不发出HTTP请求的情况下检查它是否已到期。如果您使用的是Django REST框架,那么使用JWT就很简单了。我将接受401答案,因为这是我所问问题的答案,但我同意令牌会更好。谢谢这与OP的要求完全无关。您提供的最后一步是发送401,这是正确的,但不是答案