web/lib/django/contrib/sessions/middleware.py
changeset 38 77b6da96e6f1
parent 0 0d40e90630ef
equal deleted inserted replaced
37:8d941af65caf 38:77b6da96e6f1
       
     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