From 412fab3e645717eeb7666b5e937315488591cc0c Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 19 Jun 2014 15:58:10 +0530 Subject: [PATCH] Fixed update sessions --- frappe/app.py | 6 ++++++ frappe/handler.py | 5 ----- frappe/sessions.py | 24 ++++++++++++++---------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/frappe/app.py b/frappe/app.py index c356741423..8f836138c5 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -81,6 +81,12 @@ def application(request): frappe.db.commit() rollback = False + # update session + if getattr(frappe.local, "session_obj", None): + updated_in_db = frappe.local.session_obj.update() + if updated_in_db: + frappe.db.commit() + finally: if frappe.local.request.method in ("POST", "PUT") and frappe.db and rollback: frappe.db.rollback() diff --git a/frappe/handler.py b/frappe/handler.py index 2762e51b9d..d2c59483dd 100755 --- a/frappe/handler.py +++ b/frappe/handler.py @@ -87,11 +87,6 @@ def execute_cmd(cmd): if ret: frappe.response['message'] = ret - # update session - if "session_obj" in frappe.local: - frappe.local.session_obj.update() - - def get_attr(cmd): """get method object from cmd""" if '.' in cmd: diff --git a/frappe/sessions.py b/frappe/sessions.py index b6a8861591..312c525ed4 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -250,28 +250,32 @@ class Session: def update(self, force=False): """extend session expiry""" + if (frappe.session['user'] == "Guest" or frappe.form_dict.cmd=="logout"): + return + now = frappe.utils.now() self.data['data']['last_updated'] = now self.data['data']['lang'] = unicode(frappe.lang) # update session in db - time_diff = None last_updated = frappe.cache().get_value("last_db_session_update:" + self.sid) + time_diff = frappe.utils.time_diff_in_seconds(now, last_updated) if last_updated else None - if last_updated: - time_diff = frappe.utils.time_diff_in_seconds(now, last_updated) - - if force or (frappe.session['user'] != 'Guest' and \ - ((time_diff==None) or (time_diff > 600))): - # database persistence is secondary, don't update it too often + # database persistence is secondary, don't update it too often + updated_in_db = False + if force or (time_diff==None) or (time_diff > 600): frappe.db.sql("""update tabSessions set sessiondata=%s, lastupdate=NOW() where sid=%s""" , (str(self.data['data']), self.data['sid'])) - if frappe.form_dict.cmd not in ("frappe.sessions.clear", "logout"): - frappe.cache().set_value("last_db_session_update:" + self.sid, now) - frappe.cache().set_value("session:" + self.sid, self.data) + updated_in_db = True + + # set in memcache + frappe.cache().set_value("last_db_session_update:" + self.sid, now) + frappe.cache().set_value("session:" + self.sid, self.data) + + return updated_in_db def get_expiry_period(): exp_sec = frappe.defaults.get_global_default("session_expiry") or "06:00:00"