Ticket #2548: session_middleware.11.diff

File session_middleware.11.diff, 5.9 KB (added by Chris Beaven, 17 years ago)
  • AUTHORS

     
    229229    Karen Tracey <graybark@bellsouth.net>
    230230    Makoto Tsuyuki <mtsuyuki@gmail.com>
    231231    tt@gurgle.no
    232     Amit Upadhyay
     232    Amit Upadhyay <http://www.amitu.com/blog/>
    233233    Geert Vanderkelen
    234234    viestards.lists@gmail.com
    235235    Milton Waddams
  • django/contrib/sessions/middleware.py

     
    4848    def delete_test_cookie(self):
    4949        del self[TEST_COOKIE_NAME]
    5050
     51    def get_session_age(self):
     52        return self.get('_session_age', settings.SESSION_COOKIE_AGE)
     53    def set_session_age(self, seconds):
     54        " Sets the life of the session, irrespective of global settings. "
     55        if not seconds:
     56            del self['_session_age']
     57        else:
     58            self['_session_age'] = seconds
     59
     60    def get_expire_at_browser_close(self):
     61        return settings.SESSION_EXPIRE_AT_BROWSER_CLOSE and ('_session_age' not in self)
     62
    5163    def _get_session(self):
    5264        # Lazily loads session from storage.
    5365        self.accessed = True
     
    92104                    obj = Session.objects.get_new_session_object()
    93105                    session_key = obj.session_key
    94106
    95                 if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
    96                     max_age = None
    97                     expires = None
    98                 else:
    99                     max_age = settings.SESSION_COOKIE_AGE
    100                     expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
    101                 new_session = Session.objects.save(session_key, request.session._session,
    102                     datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
    103                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
    104                     max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
     107                session_age = request.session.get_session_age()
     108                delta_age = datetime.timedelta(seconds=session_age)
     109                if request.session.get_expire_at_browser_close():
     110                    session_age = None
     111                    expires = None
     112                else:
     113                    expires = datetime.datetime.strftime(datetime.datetime.utcnow() + delta_age, "%a, %d-%b-%Y %H:%M:%S GMT")
     114                Session.objects.save(session_key, request.session._session, datetime.datetime.now() + delta_age)
     115                response.set_cookie(
     116                    settings.SESSION_COOKIE_NAME, session_key,
     117                    max_age=session_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
    105118                    secure=settings.SESSION_COOKIE_SECURE or None)
    106119        return response
  • docs/sessions.txt

     
    3939It implements the following standard dictionary methods:
    4040
    4141    * ``__getitem__(key)``
     42
    4243      Example: ``fav_color = request.session['fav_color']``
    4344
    4445    * ``__setitem__(key, value)``
     46
    4547      Example: ``request.session['fav_color'] = 'blue'``
    4648
    4749    * ``__delitem__(key)``
     50
    4851      Example: ``del request.session['fav_color']``. This raises ``KeyError``
    4952      if the given ``key`` isn't already in the session.
    5053
    5154    * ``__contains__(key)``
     55
    5256      Example: ``'fav_color' in request.session``
    5357
    5458    * ``get(key, default=None)``
     59
    5560      Example: ``fav_color = request.session.get('fav_color', 'red')``
    5661
    5762    * ``keys()``
    5863
    5964    * ``items()``
    6065
    61 It also has these three methods:
     66It also has these methods:
    6267
    6368    * ``set_test_cookie()``
     69
    6470      Sets a test cookie to determine whether the user's browser supports
    6571      cookies. Due to the way cookies work, you won't be able to test this
    6672      until the user's next page request. See "Setting test cookies" below for
    6773      more information.
    6874
    6975    * ``test_cookie_worked()``
     76
    7077      Returns either ``True`` or ``False``, depending on whether the user's
    7178      browser accepted the test cookie. Due to the way cookies work, you'll
    7279      have to call ``set_test_cookie()`` on a previous, separate page request.
    7380      See "Setting test cookies" below for more information.
    7481
    7582    * ``delete_test_cookie()``
     83
    7684      Deletes the test cookie. Use this to clean up after yourself.
    7785
     86    * ``set_session_age(seconds)``
     87
     88      It takes an integer, number of seconds for which the session should be
     89      valid. This will override the default/global session expiry policy.
     90      See `browser-length sessions vs. persistent sessions`_ for default
     91      session expiry policy. To fall back to the global session expiry policy
     92      again, call ``set_session_age(0)``.
     93
     94    * ``get_session_age()``
     95
     96      Returns the age of the session (which will equal
     97      ``settings.SESSION_COOKIE_AGE`` unless it has been overridden by
     98      ``set_session_age``).
     99
     100    * ``get_expire_at_browser_close()``
     101
     102      Returns either ``True`` or ``False``, depending on whether this session
     103      expires at browser close (which will equal
     104      ``settings.SESSION_EXPIRE_AT_BROWSER_CLOSE`` unless the session age
     105      hase been overridden by ``set_session_age``).
     106
    78107You can edit ``request.session`` at any point in your view. You can edit it
    79108multiple times.
    80109
     
    217246her browser. Use this if you want people to have to log in every time they open
    218247a browser.
    219248
     249These settings are global defaults, and can be overwritten by explicitly calling
     250``request.session.set_expiry_age()`` as described above in `Using sessions in views`_.
     251
    220252Clearing the session table
    221253==========================
    222254
Back to Top