Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 15 additions & 13 deletions sessions/middleware.py
Original file line number Diff line number Diff line change
@@ -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