Index: contrib/sessions/middleware.py
===================================================================
--- contrib/sessions/middleware.py	(revision 426)
+++ contrib/sessions/middleware.py	(working copy)
@@ -48,6 +48,13 @@
     def delete_test_cookie(self):
         del self[TEST_COOKIE_NAME]
 
+    def set_expires(self, val):
+        self["_expires_on"] = datetime.datetime.now() + datetime.timedelta(seconds=val)
+
+    def get_expires(self):
+        return self.get("_expires_on", None)
+
+
     def _get_session(self):
         # Lazily loads session from storage.
         self.accessed = True
@@ -69,6 +76,7 @@
             return self._session_cache
 
     _session = property(_get_session)
+    expires = property(get_expires, set_expires)
 
 class SessionMiddleware(object):
     def process_request(self, request):
@@ -92,14 +100,18 @@
                     obj = Session.objects.get_new_session_object()
                     session_key = obj.session_key
 
-                if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
+                now = datetime.datetime.now()
+                delta_yield = now + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
+                if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE and not request.session.expires:
                     max_age = None
                     expires = None
                 else:
-                    max_age = settings.SESSION_COOKIE_AGE
-                    expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
+                    delta_yield = request.session.expires or delta_yield
+                    max_age_timedelta = delta_yield - now
+                    max_age = max_age_timedelta.days * 24 * 60 * 60 + max_age_timedelta.seconds
+                    expires = datetime.datetime.strftime(delta_yield, "%a, %d-%b-%Y %H:%M:%S GMT")
                 new_session = Session.objects.save(session_key, request.session._session,
-                    datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
+                    delta_yield)
                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
                     max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
                     secure=settings.SESSION_COOKIE_SECURE or None)
