From c8b1ad8f55c8d45b48325d47b54a37d8f504eaa6 Mon Sep 17 00:00:00 2001
From: Graham Leggett <minfrin@apache.org>
Date: Sun, 13 Oct 2013 13:07:19 +0000
Subject: [PATCH] mod_session: Reset the max-age on session save. PR 47476.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1531683 13f79535-47bb-0310-9956-ffa450edef68
---
 CHANGES                       |  3 +++
 modules/session/mod_session.c | 13 ++++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/CHANGES b/CHANGES
index 0c583f9e14..5914b5123d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_session: Reset the max-age on session save. PR 47476. [Alexey
+     Varlamov <alexey.v.varlamov gmail com>]
+
   *) mod_session: After parsing the value of the header specified by the
      SessionHeader directive, remove the value from the response. PR 55279.
      [Graham Leggett]
diff --git a/modules/session/mod_session.c b/modules/session/mod_session.c
index 5a8ca4d8cb..89c80747cf 100644
--- a/modules/session/mod_session.c
+++ b/modules/session/mod_session.c
@@ -144,9 +144,11 @@ static apr_status_t ap_session_load(request_rec * r, session_rec ** z)
         }
     }
 
-    /* make sure the expiry is set, if present */
-    if (!zz->expiry && dconf->maxage) {
-        zz->expiry = now + dconf->maxage * APR_USEC_PER_SEC;
+    /* make sure the expiry and maxage are set, if present */
+    if (dconf->maxage) {
+        if (!zz->expiry) {
+            zz->expiry = now + dconf->maxage * APR_USEC_PER_SEC;
+        }
         zz->maxage = dconf->maxage;
     }
 
@@ -194,6 +196,11 @@ static apr_status_t ap_session_save(request_rec * r, session_rec * z)
             z->maxage = dconf->maxage;
         }
 
+        /* reset the expiry before saving if present */
+        if (z->dirty && z->maxage) {
+            z->expiry = now + z->maxage * APR_USEC_PER_SEC;
+        } 
+
         /* encode the session */
         rv = ap_run_session_encode(r, z);
         if (OK != rv) {
-- 
2.40.0