Code

Ticket #2548: sessions_set_get_expire_v3.diff

File sessions_set_get_expire_v3.diff, 2.1 KB (added by Tsume, 8 years ago)
Line 
1Index: django/contrib/sessions/middleware.py
2===================================================================
3--- django/contrib/sessions/middleware.py       (revision 3594)
4+++ django/contrib/sessions/middleware.py       (working copy)
5@@ -10,6 +10,7 @@
6     def __init__(self, session_key):
7         self.session_key = session_key
8         self.modified = False
9+        self.expires_time = False
10 
11     def __contains__(self, key):
12         return key in self._session
13@@ -43,6 +44,13 @@
14     def delete_test_cookie(self):
15         del self[TEST_COOKIE_NAME]
16 
17+    def set_expires(self, val):
18+        self.expires_time = val
19+        self.modified = True
20+
21+    def get_expires(self):
22+        return self.expires_time or settings.SESSION_COOKIE_AGE
23+
24     def _get_session(self):
25         # Lazily loads session from storage.
26         try:
27@@ -63,6 +71,7 @@
28             return self._session_cache
29 
30     _session = property(_get_session)
31+    expires = property(get_expires, set_expires)
32 
33 class SessionMiddleware(object):
34     def process_request(self, request):
35@@ -83,10 +92,11 @@
36                     max_age = None
37                     expires = None
38                 else:
39-                    max_age = settings.SESSION_COOKIE_AGE
40-                    expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
41+                    max_age = request.session.expires
42+                    delta_yield = datetime.datetime.now() + datetime.timedelta(seconds=max_age)
43+                    expires = datetime.datetime.strftime(delta_yield, "%a, %d-%b-%Y %H:%M:%S GMT")
44                 new_session = Session.objects.save(session_key, request.session._session,
45-                    datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
46+                    delta_yield)
47                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
48                     max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
49                     secure=settings.SESSION_COOKIE_SECURE or None)