app/django/contrib/sessions/backends/db.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 from django.conf import settings
       
     2 from django.contrib.sessions.models import Session
       
     3 from django.contrib.sessions.backends.base import SessionBase
       
     4 from django.core.exceptions import SuspiciousOperation
       
     5 import datetime
       
     6 
       
     7 class SessionStore(SessionBase):
       
     8     """
       
     9     Implements database session store
       
    10     """
       
    11     def __init__(self, session_key=None):
       
    12         super(SessionStore, self).__init__(session_key)
       
    13 
       
    14     def load(self):
       
    15         try:
       
    16             s = Session.objects.get(
       
    17                 session_key = self.session_key,
       
    18                 expire_date__gt=datetime.datetime.now()
       
    19             )
       
    20             return self.decode(s.session_data)
       
    21         except (Session.DoesNotExist, SuspiciousOperation):
       
    22 
       
    23             # Create a new session_key for extra security.
       
    24             self.session_key = self._get_new_session_key()
       
    25             self._session_cache = {}
       
    26 
       
    27             # Save immediately to minimize collision
       
    28             self.save()
       
    29             # Ensure the user is notified via a new cookie.
       
    30             self.modified = True
       
    31             return {}
       
    32 
       
    33     def exists(self, session_key):
       
    34         try:
       
    35             Session.objects.get(session_key=session_key)
       
    36         except Session.DoesNotExist:
       
    37             return False
       
    38         return True
       
    39 
       
    40     def save(self):
       
    41         Session.objects.create(
       
    42             session_key = self.session_key,
       
    43             session_data = self.encode(self._session),
       
    44             expire_date = datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
       
    45         )
       
    46 
       
    47     def delete(self, session_key):
       
    48         try:
       
    49             Session.objects.get(session_key=session_key).delete()
       
    50         except Session.DoesNotExist:
       
    51             pass