|
0
|
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 |
from django.utils.importlib import import_module |
|
|
7 |
|
|
|
8 |
class SessionMiddleware(object): |
|
|
9 |
def process_request(self, request): |
|
|
10 |
engine = import_module(settings.SESSION_ENGINE) |
|
|
11 |
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) |
|
|
12 |
request.session = engine.SessionStore(session_key) |
|
|
13 |
|
|
|
14 |
def process_response(self, request, response): |
|
|
15 |
""" |
|
|
16 |
If request.session was modified, or if the configuration is to save the |
|
|
17 |
session every time, save the changes and set a session cookie. |
|
|
18 |
""" |
|
|
19 |
try: |
|
|
20 |
accessed = request.session.accessed |
|
|
21 |
modified = request.session.modified |
|
|
22 |
except AttributeError: |
|
|
23 |
pass |
|
|
24 |
else: |
|
|
25 |
if accessed: |
|
|
26 |
patch_vary_headers(response, ('Cookie',)) |
|
|
27 |
if modified or settings.SESSION_SAVE_EVERY_REQUEST: |
|
|
28 |
if request.session.get_expire_at_browser_close(): |
|
|
29 |
max_age = None |
|
|
30 |
expires = None |
|
|
31 |
else: |
|
|
32 |
max_age = request.session.get_expiry_age() |
|
|
33 |
expires_time = time.time() + max_age |
|
|
34 |
expires = cookie_date(expires_time) |
|
|
35 |
# Save the session data and refresh the client cookie. |
|
|
36 |
request.session.save() |
|
|
37 |
response.set_cookie(settings.SESSION_COOKIE_NAME, |
|
|
38 |
request.session.session_key, max_age=max_age, |
|
|
39 |
expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, |
|
|
40 |
path=settings.SESSION_COOKIE_PATH, |
|
|
41 |
secure=settings.SESSION_COOKIE_SECURE or None) |
|
|
42 |
return response |