2011-03-05 40 views
1

我目前使用SESSION_COOKIE_AGE = 60*60在1小時內過期Django會話。我需要向用戶發送一條消息,說他們的會話在登錄頁面已過期。Django過期會話消息API

有沒有辦法測試會話是否已過期?或者是否有在Django中過期會話的消息api?

我戳了一下,沒有看到任何設置過期的會話消息。

謝謝!

回答

0

通常提供給用戶的警告是登錄邀請:-)。

你可以做的是檢查SESSION_COOKIE_AGE(它提供了cookie的年齡,以秒爲單位),如果用戶的會話即將到期,請提供相應的警告。

+0

我不是在尋找一個關於到過期會話的警告。我需要在登錄頁面上刷新用戶,例如「您的會話已過期,請再次登錄以繼續查看。」 – Kyle 2011-03-07 18:41:39

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')) 
+0

如果用戶的會話過期,用戶在用戶刷新頁面時會自動重定向到LOGIN_URL,並且該視圖在會話過期時不會運行。所以這是不正確的。 – 2017-08-17 12:37:17

0

我鼓勵同樣的問題,解決了如下圖所示:

的Django會話過期後重定向到LOGIN_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)