|
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 |