Ticket #2548: session_middleware.9.diff

File session_middleware.9.diff, 4.3 KB (added by upadhyay@…, 17 years ago)

[Looks like I am not going to stop embaressing myself today.] Updated the docs too.

  • 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 set_life(self, val):
     52        """
     53            sets the life of the session, irrespective of global settings.
     54            val is in seconds.
     55        """
     56        self["_expires_on"] = TILL_BROWSER_CLOSE
     57
    5158    def _get_session(self):
    5259        # Lazily loads session from storage.
    5360        self.accessed = True
     
    9299                    obj = Session.objects.get_new_session_object()
    93100                    session_key = obj.session_key
    94101
    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,
     102                now = datetime.datetime.now()
     103                delta_yield = now + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
     104                if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE and not request.session.get("_expires_on"):
     105                    max_age = None
     106                    expires = None
     107                else:
     108                    delta_yield = request.session.get("_expires_on", delta_yield)
     109                    max_age_timedelta = delta_yield - now
     110                    max_age = max_age_timedelta.days * 24 * 60 * 60 + max_age_timedelta.seconds
     111                    expires = datetime.datetime.strftime(delta_yield, "%a, %d-%b-%Y %H:%M:%S GMT")
     112                Session.objects.save(session_key, request.session._session, delta_yield)
     113                response.set_cookie(
     114                    settings.SESSION_COOKIE_NAME, session_key,
    104115                    max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
    105                     secure=settings.SESSION_COOKIE_SECURE or None)
     116                    secure=settings.SESSION_COOKIE_SECURE or None
     117                )
    106118        return response
  • docs/sessions.txt

     
    5858
    5959    * ``items()``
    6060
    61 It also has these three methods:
     61It also has these four methods:
    6262
    6363    * ``set_test_cookie()``
    6464      Sets a test cookie to determine whether the user's browser supports
     
    7575    * ``delete_test_cookie()``
    7676      Deletes the test cookie. Use this to clean up after yourself.
    7777
     78    * ``set_life(val)``
     79      It takes an integer, number of seconds for which the session should be
     80      valid. It can also take django.contrib.session.models.TILL_BROWSER_CLOSE,
     81      that will quell the session at the close of browser. Calling set_life
     82      will overwrite the global/default session expiry policy. See
     83      `browser-length sessions vs. persistent sessions` for default session expiry
     84      policy.
     85
    7886You can edit ``request.session`` at any point in your view. You can edit it
    7987multiple times.
    8088
     
    217225her browser. Use this if you want people to have to log in every time they open
    218226a browser.
    219227
     228These settings are global defaults, and can be overwritten by explicitly calling
     229``request.session.set_life()`` as described above.
     230
    220231Clearing the session table
    221232==========================
    222233
Back to Top