【问题标题】:Django Expired Session Message APIDjango 过期会话消息 API
【发布时间】:2011-03-05 00:36:37
【问题描述】:

我目前正在使用SESSION_COOKIE_AGE = 60*60 在 1 小时内使 Django 会话到期。我需要在登录页面上向用户发送一条消息,说明他们的会话已过期。

有没有办法测试会话是否已过期?或者Django中有过期会话的消息api吗?

我四处寻找,没有看到设置过期会话消息的任何内容。

谢谢!

【问题讨论】:

    标签: django session


    【解决方案1】:

    要显示会话已过期的消息,您可以检查注销视图中是否存在会话并相应地更改成功消息

    class Logout(View):
    def get(self, request):
        if request.session:
            messages.success(request, 'Successfully Logged Out')
        else:
            messages.error(request, 'Session Expired Please Login Again')
        logout(request)
        return redirect(reverse('login'))
    

    【讨论】:

    • 如果用户的会话过期,当用户刷新页面时,用户会在内部自动重定向到 LOGIN_URL,并且该视图在会话过期时不会运行。所以这是不正确的。
    【解决方案2】:

    通常向用户提供的警告是登录邀请:-)。

    您可以做的是检查 SESSION_COOKIE_AGE(以秒为单位提供 cookie 的年龄),如果用户的会话即将到期,则提供警告。

    【讨论】:

    • 我不是在寻找即将到期的会话的警告。我需要在登录页面上刷新用户,例如“您的会话已过期。请重新登录以继续签出。”
    【解决方案3】:

    我鼓励同样的问题并解决如下:

    会话过期后,Django 重定向到 LOGIN_URL。 所以我将登录 url 指向settings.py 中的注销视图,以便向用户显示消息 并重定向到我们的登录视图。

    settings.py:

    LOGIN_URL = reverse_lazy('account:logout') 
    

    views.py:

    class LogoutView(RedirectView):
        url = reverse_lazy('account:login') # Our login view
    
        def get(self, request, **kwargs):
    
            # If session expired django clean request.session object.
            # If user came to this view by clicking to logout button request.session not comes empty 
            if request.session.is_empty():
                messages.error(request, "Your session has expired. Please login again to continue checking out.")
    
            logout(request)
    
            if request.GET.get('next'):
                self.url = '{}?next={}'.format(self.url, request.GET.get('next'))
    
            return super(LogoutView, self).get(request, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2012-02-01
      • 2017-11-08
      • 2016-06-22
      相关资源
      最近更新 更多