From 665e14186ee6b1b7cb7a68b51f8142c0c1711fca Mon Sep 17 00:00:00 2001 From: mdipierro Date: Sun, 17 Jul 2016 04:18:56 -0500 Subject: [PATCH] fixed issue with sessions in db on GAE --- applications/examples/static/css/stupid.css | 2 +- gluon/globals.py | 37 +++++++++++---------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/applications/examples/static/css/stupid.css b/applications/examples/static/css/stupid.css index 35d6fa52..08f42938 100644 --- a/applications/examples/static/css/stupid.css +++ b/applications/examples/static/css/stupid.css @@ -317,7 +317,7 @@ a:not(.btn):not(.noeffect):after { .accordion>input {display:none} .accordion>input:checked ~ *:not(label) { max-height: 1000px !important; - overflow:visible !important; + overflow:hidden !important; -webkit-transition: max-height .3s ease-in; transition: max-height .3s ease-in; } diff --git a/gluon/globals.py b/gluon/globals.py index ae8b2ac2..b1a501e3 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -1192,28 +1192,29 @@ class Session(Storage): def _try_store_in_file(self, request, response): try: - if (not response.session_id or self._forget - or self._unchanged(response)): + if (not response.session_id or + not response.session_filename or + self._forget + or self._unchanged(response)): # self.clear_session_cookies() - self.save_session_id_cookie() return False - if response.session_new or not response.session_file: - # Tests if the session sub-folder exists, if not, create it - session_folder = os.path.dirname(response.session_filename) - if not os.path.exists(session_folder): - os.mkdir(session_folder) - response.session_file = recfile.open(response.session_filename, 'wb') - portalocker.lock(response.session_file, portalocker.LOCK_EX) - response.session_locked = True - if response.session_file: - session_pickled = response.session_pickled or pickle.dumps(self, pickle.HIGHEST_PROTOCOL) - response.session_file.write(session_pickled) - response.session_file.truncate() + else: + if response.session_new or not response.session_file: + # Tests if the session sub-folder exists, if not, create it + session_folder = os.path.dirname(response.session_filename) + if not os.path.exists(session_folder): + os.mkdir(session_folder) + response.session_file = recfile.open(response.session_filename, 'wb') + portalocker.lock(response.session_file, portalocker.LOCK_EX) + response.session_locked = True + if response.session_file: + session_pickled = response.session_pickled or pickle.dumps(self, pickle.HIGHEST_PROTOCOL) + response.session_file.write(session_pickled) + response.session_file.truncate() + return True finally: self._close(response) - - self.save_session_id_cookie() - return True + self.save_session_id_cookie() def _unlock(self, response): if response and response.session_file and response.session_locked: