Hi,

This issue was caused because we recently added session_write_delay in
session.
So session won't be written/updated to disk from memory until specified
seconds are elapsed.

However we must forcefully write/update session to disk if user loges in or
out irrespective of session_write_delay to keep sessions from memory and
disk in sync as user logged in status is
kept in session.

-- 
*Harshal Dhumal*
*Sr. Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py
index b204967..61a9beb 100644
--- a/web/pgadmin/__init__.py
+++ b/web/pgadmin/__init__.py
@@ -17,7 +17,7 @@ from importlib import import_module
 from flask import Flask, abort, request, current_app, session, url_for
 from flask_babel import Babel, gettext
 from flask_htmlmin import HTMLMIN
-from flask_login import user_logged_in
+from flask_login import user_logged_in, user_logged_out
 from flask_security import Security, SQLAlchemyUserDatastore
 from flask_mail import Mail
 from flask_security.utils import login_user
@@ -368,7 +368,6 @@ def create_app(app_name=None):
     ##########################################################################
     @user_logged_in.connect_via(app)
     def on_user_logged_in(sender, user):
-
         # Keep hold of the user ID
         user_id = user.id
 
@@ -497,6 +496,10 @@ def create_app(app_name=None):
         except:
             pass
 
+    @user_logged_in.connect_via(app)
+    @user_logged_out.connect_via(app)
+    def force_session_write(app, user):
+        session.force_write = True
 
     ##########################################################################
     # Load plugin modules
diff --git a/web/pgadmin/utils/session.py b/web/pgadmin/utils/session.py
index e4ff765..8f2ae61 100644
--- a/web/pgadmin/utils/session.py
+++ b/web/pgadmin/utils/session.py
@@ -58,6 +58,7 @@ class ManagedSession(CallbackDict, SessionMixin):
         self.modified = False
         self.randval = randval
         self.last_write = None
+        self.force_write = False
         self.hmac_digest = hmac_digest
 
     def sign(self, secret):
@@ -219,12 +220,13 @@ class FileBackedSessionManager(SessionManager):
         current_time = time.time()
         if not session.hmac_digest:
             session.sign(self.secret)
-        else:
+        elif not session.force_write:
             if session.last_write is not None \
                     and (current_time - float(session.last_write)) < self.disk_write_delay:
                 return
 
         session.last_write = current_time
+        session.force_write = False
         fname = os.path.join(self.path, session.sid)
         with open(fname, 'wb') as f:
             dump(

Reply via email to