From 2720d91581dc0aeedaadd97a94858a8681c79dbb Mon Sep 17 00:00:00 2001 From: Ranjith Date: Sun, 26 Nov 2017 17:41:26 +0530 Subject: [PATCH] Fix for - The method setMaxInactiveInterval of session is not effective --- .../request/session/redis/SessionManager.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/tomcat/request/session/redis/SessionManager.java b/src/main/java/tomcat/request/session/redis/SessionManager.java index 81abad3..08fa878 100644 --- a/src/main/java/tomcat/request/session/redis/SessionManager.java +++ b/src/main/java/tomcat/request/session/redis/SessionManager.java @@ -143,7 +143,7 @@ public class SessionManager extends ManagerBase implements Lifecycle { initialize(); - log.info("The sessions will expire after " + (getSessionTimeout()) + " seconds."); + log.info("The sessions will expire after " + (getSessionTimeout(null)) + " seconds."); context.setDistributable(true); } @@ -171,7 +171,7 @@ public class SessionManager extends ManagerBase implements Lifecycle { session.setNew(true); session.setValid(true); session.setCreationTime(System.currentTimeMillis()); - session.setMaxInactiveInterval(getSessionTimeout()); + session.setMaxInactiveInterval(getSessionTimeout(session)); session.tellNew(); } setValues(sessionId, session, false, new SessionMetadata()); @@ -230,7 +230,7 @@ public class SessionManager extends ManagerBase implements Lifecycle { newSession.setNew(false); newSession.setValid(true); newSession.resetDirtyTracking(); - newSession.setMaxInactiveInterval(getSessionTimeout()); + newSession.setMaxInactiveInterval(getSessionTimeout(newSession)); session = newSession; isPersisted = true; @@ -310,7 +310,7 @@ public class SessionManager extends ManagerBase implements Lifecycle { setValues(true, metadata); } - int timeout = getSessionTimeout(); + int timeout = getSessionTimeout(newSession); this.dataCache.expire(newSession.getId(), timeout); log.trace("Session [" + newSession.getId() + "] expire in [" + timeout + "] seconds."); @@ -346,9 +346,10 @@ public class SessionManager extends ManagerBase implements Lifecycle { /** * @return */ - private int getSessionTimeout() { + private int getSessionTimeout(Session session) { int timeout = getContextIns().getSessionTimeout() * 60; - return (timeout < 1800) ? 1800 : timeout; + int sessionTimeout = (session == null) ? 0 : session.getMaxInactiveInterval() * 60; + return (sessionTimeout < timeout) ? ((timeout < 1800) ? 1800 : timeout) : sessionTimeout; } /**