diff --git a/sessions/middleware.py b/sessions/middleware.py index da9b024..4a67bcf 100644 --- a/sessions/middleware.py +++ b/sessions/middleware.py @@ -1,24 +1,26 @@ +import datetime + +from django.conf import settings + from django.contrib.auth import logout from django.contrib import messages -import datetime -import settings class SessionIdleTimeout: - """Middleware class to timeout a session after a specified time period. + """ + Middleware class to timeout a session after a specified time period. """ def process_request(self, request): - # Timeout is done only for authenticated logged in users. if request.user.is_authenticated(): - current_datetime = datetime.datetime.now() - - # Timeout if idle time period is exceeded. - if request.session.has_key('last_activity') and \ - (current_datetime - request.session['last_activity']).seconds > \ - settings.SESSION_IDLE_TIMEOUT: + now = datetime.datetime.now() + + last_activity = request.session.get('last_activity', now) + since = datetime.timedelta.total_seconds(now - last_activity) + expired = since > settings.SESSION_IDLE_TIMEOUT + + if expired: logout(request) - messages.add_message(request, messages.ERROR, 'Your session has been timed out.') - # Set last activity time in current session. + messages.error(request, 'Your session has been timed out.') else: - request.session['last_activity'] = current_datetime + request.session['last_activity'] = now return None