【发布时间】:2011-03-05 00:36:37
【问题描述】:
我目前正在使用SESSION_COOKIE_AGE = 60*60 在 1 小时内使 Django 会话到期。我需要在登录页面上向用户发送一条消息,说明他们的会话已过期。
有没有办法测试会话是否已过期?或者Django中有过期会话的消息api吗?
我四处寻找,没有看到设置过期会话消息的任何内容。
谢谢!
【问题讨论】:
我目前正在使用SESSION_COOKIE_AGE = 60*60 在 1 小时内使 Django 会话到期。我需要在登录页面上向用户发送一条消息,说明他们的会话已过期。
有没有办法测试会话是否已过期?或者Django中有过期会话的消息api吗?
我四处寻找,没有看到设置过期会话消息的任何内容。
谢谢!
【问题讨论】:
要显示会话已过期的消息,您可以检查注销视图中是否存在会话并相应地更改成功消息
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'))
【讨论】:
通常向用户提供的警告是登录邀请:-)。
您可以做的是检查 SESSION_COOKIE_AGE(以秒为单位提供 cookie 的年龄),如果用户的会话即将到期,则提供警告。
【讨论】:
我鼓励同样的问题并解决如下:
会话过期后,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)
【讨论】: