diff --git a/frappe/app.py b/frappe/app.py index 555752a13b..605b7e9fc1 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -409,7 +409,6 @@ def sync_database(rollback: bool) -> bool: # update session if session := getattr(frappe.local, "session_obj", None): if session.update(): - frappe.db.commit() rollback = False return rollback diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index beefbc3ce6..3534fd6247 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -416,7 +416,7 @@ def get_workspace_sidebar_items(): has_access = "Workspace Manager" in frappe.get_roles() # don't get domain restricted pages - blocked_modules = frappe.get_doc("User", frappe.session.user).get_blocked_modules() + blocked_modules = frappe.get_cached_doc("User", frappe.session.user).get_blocked_modules() blocked_modules.append("Dummy Module") # adding None to allowed_domains to include pages without domain restriction diff --git a/frappe/sessions.py b/frappe/sessions.py index 9f0a5a0b25..0e5a62b9a9 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -192,7 +192,7 @@ def generate_csrf_token(): class Session: - __slots__ = ("user", "user_type", "full_name", "data", "time_diff", "sid") + __slots__ = ("user", "user_type", "full_name", "data", "time_diff", "sid", "_update_in_cache") def __init__(self, user, resume=False, full_name=None, user_type=None): self.sid = cstr(frappe.form_dict.get("sid") or unquote(frappe.request.cookies.get("sid", "Guest"))) @@ -201,6 +201,7 @@ class Session: self.full_name = full_name self.data = frappe._dict({"data": frappe._dict({})}) self.time_diff = None + self._update_in_cache = False # set local session frappe.local.session = self.data @@ -319,6 +320,7 @@ class Session: data = self.get_session_data_from_cache() if not data: + self._update_in_cache = True data = self.get_session_data_from_db() return data @@ -369,6 +371,7 @@ class Session: def update(self, force=False): """extend session expiry""" + if frappe.session.user == "Guest": return @@ -376,9 +379,6 @@ class Session: Sessions = frappe.qb.DocType("Sessions") - self.data["data"]["last_updated"] = now - self.data["data"]["lang"] = str(frappe.lang) - # update session in db last_updated = frappe.cache.hget("last_db_session_update", self.sid) time_diff = frappe.utils.time_diff_in_seconds(now, last_updated) if last_updated else None @@ -386,6 +386,8 @@ class Session: # database persistence is secondary, don't update it too often updated_in_db = False if (force or (time_diff is None) or (time_diff > 600)) and not frappe.flags.read_only: + self.data.data.last_updated = now + self.data.data.lang = str(frappe.lang) # update sessions table ( frappe.qb.update(Sessions) @@ -400,11 +402,10 @@ class Session: frappe.db.set_value("User", frappe.session.user, "last_active", now, update_modified=False) frappe.db.commit() - frappe.cache.hset("last_db_session_update", self.sid, now) - updated_in_db = True - frappe.cache.hset("session", self.sid, self.data) + frappe.cache.hset("last_db_session_update", self.sid, now) + frappe.cache.hset("session", self.sid, self.data) return updated_in_db