|
1 import time |
|
2 |
|
3 from django.conf import settings |
|
4 from django.utils.cache import patch_vary_headers |
|
5 from django.utils.http import cookie_date |
|
6 |
|
7 TEST_COOKIE_NAME = 'testcookie' |
|
8 TEST_COOKIE_VALUE = 'worked' |
|
9 |
|
10 class SessionMiddleware(object): |
|
11 |
|
12 def process_request(self, request): |
|
13 engine = __import__(settings.SESSION_ENGINE, {}, {}, ['']) |
|
14 session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) |
|
15 request.session = engine.SessionStore(session_key) |
|
16 |
|
17 def process_response(self, request, response): |
|
18 # If request.session was modified, or if response.session was set, save |
|
19 # those changes and set a session cookie. |
|
20 try: |
|
21 accessed = request.session.accessed |
|
22 modified = request.session.modified |
|
23 except AttributeError: |
|
24 pass |
|
25 else: |
|
26 if accessed: |
|
27 patch_vary_headers(response, ('Cookie',)) |
|
28 if modified or settings.SESSION_SAVE_EVERY_REQUEST: |
|
29 if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: |
|
30 max_age = None |
|
31 expires = None |
|
32 else: |
|
33 max_age = settings.SESSION_COOKIE_AGE |
|
34 expires_time = time.time() + settings.SESSION_COOKIE_AGE |
|
35 expires = cookie_date(expires_time) |
|
36 # Save the seesion data and refresh the client cookie. |
|
37 request.session.save() |
|
38 response.set_cookie(settings.SESSION_COOKIE_NAME, |
|
39 request.session.session_key, max_age=max_age, |
|
40 expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, |
|
41 path=settings.SESSION_COOKIE_PATH, |
|
42 secure=settings.SESSION_COOKIE_SECURE or None) |
|
43 |
|
44 return response |