Changeset 938
- Timestamp:
- 01/25/06 10:17:37
- Files:
-
- trunk/cherrypy/filters/sessionfilter.py (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/filters/sessionfilter.py
r937 r938 10 10 11 11 Variables used to store temporary variables: 12 - sess.session Storage (instance of the class implementing the backend)12 - sess.session_storage (instance of the class implementing the backend) 13 13 14 14 15 15 Variables used to store the session for the current request: 16 - sess.session Data: dictionary containing the actual session data16 - sess.session_data: dictionary containing the actual session data 17 17 - sess.sessionID: current session ID 18 - sess.expiration Time: date/time when the current session will expire18 - sess.expiration_time: date/time when the current session will expire 19 19 20 20 Global variables (RAM backend only): … … 69 69 if ((not conf('session_filter.on', False)) 70 70 or conf('static_filter.on', False)): 71 sess.session Storage = None71 sess.session_storage = None 72 72 return 73 73 … … 106 106 # People can set their own custom class 107 107 # through session_filter.storage_class 108 sess.session Storage = conf('session_filter.storage_class', None)109 if sess.session Storage is None:110 sess.session Storage = globals()[storage + 'Storage']()108 sess.session_storage = conf('session_filter.storage_class', None) 109 if sess.session_storage is None: 110 sess.session_storage = globals()[storage + 'Storage']() 111 111 else: 112 sess.session Storage = sess.sessionStorage()112 sess.session_storage = sess.session_storage() 113 113 114 114 # Check if we need to clean up old sessions 115 115 if cherrypy._session_last_clean_up_time + cleanUpDelay < now: 116 sess.session Storage.clean_up()116 sess.session_storage.clean_up() 117 117 118 118 # Check if request came with a session ID … … 123 123 # If using implicit locking, acquire lock 124 124 if sess.sessionLocking == 'implicit': 125 sess.session Data = {'_id': sess.sessionID}126 sess.session Storage.acquire_lock()125 sess.session_data = {'_id': sess.sessionID} 126 sess.session_storage.acquire_lock() 127 127 128 data = sess.session Storage.load(sess.sessionID)129 # data is either None or a tuple (session Data, expirationTime)128 data = sess.session_storage.load(sess.sessionID) 129 # data is either None or a tuple (session_data, expiration_time) 130 130 if data is None or data[1] < now: 131 131 # Expired session: 132 132 # flush session data (but keep the same sessionID) 133 sess.session Data = {'_id': sess.sessionID}133 sess.session_data = {'_id': sess.sessionID} 134 134 else: 135 sess.session Data = data[0]135 sess.session_data = data[0] 136 136 else: 137 137 # No sessionID yet 138 138 sess.sessionID = sess.generate_session_id() 139 sess.session Data = {'_id': sess.sessionID}140 sess.onCreateSession(sess.session Data)139 sess.session_data = {'_id': sess.sessionID} 140 sess.onCreateSession(sess.session_data) 141 141 # Set response cookie 142 142 cookie = cherrypy.response.simpleCookie … … 160 160 # Save session data 161 161 t = datetime.timedelta(seconds = sess.sessionTimeout * 60) 162 expiration Time = datetime.datetime.now() + t163 sess.session Storage.save(sess.sessionID, sess.sessionData,164 expiration Time)162 expiration_time = datetime.datetime.now() + t 163 sess.session_storage.save(sess.sessionID, sess.session_data, 164 expiration_time) 165 165 if sess.locked: 166 166 # Always release the lock if the user didn't release it 167 sess.session Storage.release_lock()167 sess.session_storage.release_lock() 168 168 169 169 # If the body is not a generator, we save the data … … 174 174 175 175 sess = cherrypy.request._session 176 if not getattr(sess, 'session Storage', None):176 if not getattr(sess, 'session_storage', None): 177 177 # Sessions are not enabled: do nothing 178 178 return … … 184 184 def on_end_request(self): 185 185 sess = cherrypy.request._session 186 if not getattr(sess, 'session Storage', None):186 if not getattr(sess, 'session_storage', None): 187 187 # Sessions are not enabled: do nothing 188 188 return 189 189 if getattr(sess, 'locked', None): 190 190 # If the session is still locked we release the lock 191 sess.session Storage.release_lock()192 if getattr(sess, 'session Storage', None):193 del sess.session Storage191 sess.session_storage.release_lock() 192 if getattr(sess, 'session_storage', None): 193 del sess.session_storage 194 194 195 195 … … 200 200 return cherrypy._session_data_holder.get(id) 201 201 202 def save(self, id, data, expiration Time):203 cherrypy._session_data_holder[id] = (data, expiration Time)202 def save(self, id, data, expiration_time): 203 cherrypy._session_data_holder[id] = (data, expiration_time) 204 204 205 205 def acquire_lock(self): … … 227 227 def clean_up(self): 228 228 sess = cherrypy.request._session 229 to BeDeleted = []229 to_be_deleted = [] 230 230 now = datetime.datetime.now() 231 for id, (data, expiration Time) in cherrypy._session_data_holder.iteritems():232 if expiration Time < now:233 to BeDeleted.append(id)234 for id in to BeDeleted:231 for id, (data, expiration_time) in cherrypy._session_data_holder.iteritems(): 232 if expiration_time < now: 233 to_be_deleted.append(id) 234 for id in to_be_deleted: 235 235 try: 236 deleted_session = cherrypy._session_data_holder[id] 236 237 del cherrypy._session_data_holder[id] 237 sess.onDeleteSession( cherrypy._session_data_holder[id])238 sess.onDeleteSession(deleted_session) 238 239 except KeyError: 239 240 # The session probably got deleted by a concurrent thread … … 258 259 return None 259 260 260 def save(self, id, data, expiration Time):261 def save(self, id, data, expiration_time): 261 262 filePath = self._getFilePath(id) 262 263 f = open(filePath, "wb") 263 pickle.dump((data, expiration Time), f)264 pickle.dump((data, expiration_time), f) 264 265 f.close() 265 266 … … 292 293 try: 293 294 f = open(filePath, "rb") 294 data, expiration Time = pickle.load(f)295 data, expiration_time = pickle.load(f) 295 296 f.close() 296 if expiration Time < now:297 if expiration_time < now: 297 298 # Session expired: deleting it 298 299 id = fname[len(self.SESSION_PREFIX):] … … 355 356 if not rows: 356 357 return None 357 pickled_data, expiration Time = rows[0]358 pickled_data, expiration_time = rows[0] 358 359 # Unpickle data 359 360 data = pickle.loads(pickled_data) 360 return (data, expiration Time)361 362 def save(self, id, data, expiration Time):361 return (data, expiration_time) 362 363 def save(self, id, data, expiration_time): 363 364 # Try to delete session if it was already there 364 365 self.cursor.execute( … … 370 371 self.cursor.execute( 371 372 'insert into session (id, data, expiration_time) values (%s, %s, %s)', 372 (id, pickled_data, expiration Time))373 (id, pickled_data, expiration_time)) 373 374 374 375 def acquire_lock(self): … … 406 407 # to be thread-specific so we use a special wrapper that forwards 407 408 # calls to cherrypy.session to a thread-specific dictionary called 408 # cherrypy.request._session.session Data409 # cherrypy.request._session.session_data 409 410 class SessionWrapper: 410 411 411 412 def __getattr__(self, name): 412 413 sess = cherrypy.request._session 413 if sess.session Storage is None:414 if sess.session_storage is None: 414 415 raise SessionNotEnabledError() 415 416 # Create thread-specific dictionary if needed 416 sess.session Data = getattr(sess, 'sessionData', {})417 sess.session_data = getattr(sess, 'session_data', {}) 417 418 if name == 'acquire_lock': 418 return sess.session Storage.acquire_lock419 return sess.session_storage.acquire_lock 419 420 elif name == 'release_lock': 420 return sess.session Storage.release_lock421 return getattr(sess.session Data, name)422 421 return sess.session_storage.release_lock 422 return getattr(sess.session_data, name) 423

