我目前正在使用SESSION_COOKIE_AGE = 60*60
在1小时内使Django会话失效。我需要向用户说明他们的会话已在登录页面上过期。
有没有办法测试会话是否已过期?或者Django中是否有过期会话的消息api?
我四处寻找并没有看到任何设置过期会话消息的内容。
谢谢!
答案 0 :(得分: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'))
答案 1 :(得分:0)
通常提供给用户的警告是登录邀请: - )。
你可以做的是检查SESSION_COOKIE_AGE(以秒为单位提供cookie的年龄),如果用户的会话即将到期,则提供相应的警告。
答案 2 :(得分:0)
我鼓励同样的问题并解决如下所示:
会话过期后,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)