diff --git a/odoo/addons/base/models/ir_http.py b/odoo/addons/base/models/ir_http.py index 3eba7932a44..d5ab635a5f0 100644 --- a/odoo/addons/base/models/ir_http.py +++ b/odoo/addons/base/models/ir_http.py @@ -256,7 +256,9 @@ class IrHttp(models.AbstractModel): @api.autovacuum def _gc_sessions(self): - http.root.session_store.vacuum() + ICP = self.env["ir.config_parameter"] + max_lifetime = int(ICP.get_param('sessions.max_inactivity_seconds', http.SESSION_LIFETIME)) + http.root.session_store.vacuum(max_lifetime=max_lifetime) @api.model def get_translations_for_webclient(self, modules, lang): diff --git a/odoo/http.py b/odoo/http.py index 50ae1b9b64c..48cf1aa8763 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -280,9 +280,10 @@ if parse_version(werkzeug.__version__) >= parse_version('2.0.2'): # let's add the websocket key only when appropriate. ROUTING_KEYS.add('websocket') -# The duration of a user session before it is considered expired, -# three months. -SESSION_LIFETIME = 60 * 60 * 24 * 90 +# The default duration of a user session cookie. Inactive sessions are reaped +# server-side as well with a threshold that can be set via an optional +# config parameter `sessions.max_inactivity_seconds` (default: SESSION_LIFETIME) +SESSION_LIFETIME = 60 * 60 * 24 * 7 # The cache duration for static content from the filesystem, one week. STATIC_CACHE = 60 * 60 * 24 * 7 @@ -889,8 +890,8 @@ class FilesystemSessionStore(sessions.FilesystemSessionStore): session.should_rotate = False self.save(session) - def vacuum(self): - threshold = time.time() - SESSION_LIFETIME + def vacuum(self, max_lifetime=SESSION_LIFETIME): + threshold = time.time() - max_lifetime for fname in glob.iglob(os.path.join(root.session_store.path, '*', '*')): path = os.path.join(root.session_store.path, fname) with contextlib.suppress(OSError):