Changeset 380
- Timestamp:
- 06/25/05 10:07:48
- Files:
-
- trunk/cherrypy/_cpconfig.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/basesession.py (modified) (4 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/dbmsession.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/filesession.py (modified) (4 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/ramsession.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/sessionconfig.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/sessionfilter.py (modified) (3 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/sqlobjectsession.py (modified) (2 diffs)
- trunk/cherrypy/tutorial/tut09_sessionfilter.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/_cpconfig.py
r377 r380 35 35 36 36 'sessionFilter.on' : False, 37 'sessionFilter.session sList' : ['default'],37 'sessionFilter.sessionList' : ['default'], 38 38 'sessionFilter.default.on': True, 39 39 'sessionFilter.default.timeout': 60, trunk/cherrypy/lib/filter/sessionfilter/basesession.py
r375 r380 41 41 The functions which need to be redefined are at the end of the file 42 42 """ 43 44 # by default don't use session caching 45 noCache = True 43 46 44 47 # these are the functions that need to rewritten … … 114 117 115 118 def commitCache(self, sessionKey): 119 """ commit a session to persistand storage """ 116 120 117 121 session = self.__sessionCache[sessionKey] … … 121 125 cacheTimeout = sessionconfig.retrieve('cacheTimeout', self.sessionName, None) 122 126 123 if session.threadCount == 0 and not cacheTimeout:127 if session.threadCount == 0 and (self.noCache or not cacheTimeout): 124 128 del self.__sessionCache[sessionKey] 125 """ commit a session to persistand storage """126 129 127 130 def cleanUpCache(self): … … 131 134 132 135 # don't waste cycles if we aren't caching inactive sessions 133 if cacheTimeout :136 if cacheTimeout and not self.noCache: 134 137 for session in self.__sessionCache.itervalues(): 135 138 # make sure the session doesn't have any active threads 136 expired = time.time() < (session.lastAccess + cacheTimeout )139 expired = time.time() < (session.lastAccess + cacheTimeout * 60) 137 140 if session.threadCount == 0 and expired: 138 141 del self.__sessionCache[session.key] 139 trunk/cherrypy/lib/filter/sessionfilter/dbmsession.py
r375 r380 38 38 39 39 class DBMSession(BaseSession): 40 41 # it is ok to cache the sessoin data 42 noCache = False 43 40 44 def __init__(self, sessionName): 41 45 cpg = cherrypy.cpg trunk/cherrypy/lib/filter/sessionfilter/filesession.py
r375 r380 40 40 41 41 class FileSession(BaseSession): 42 42 43 # is ok to cache filesession data 44 noCache = False 45 43 46 def __init__(self, sessionName): 44 47 BaseSession.__init__(self, sessionName) 45 48 self.__fileLock = threading.RLock() 46 49 47 def __storageDir(self):48 cpg = cherrypy.cpg49 50 storageDir = sessionconfig.retrieve('storageFileDir', self.sessionName)51 return storageDir52 53 50 def newSession(self): 54 51 """ Return a new sessiondict instance """ … … 58 55 # all session writes are blocked 59 56 def getSession(self, sessionKey): 60 sessionStorageFileDir = self.__storageDir()61 57 if not sessionKey: 62 58 raise SessionNotFoundError 63 fname = os.path.join(sessionStorageFileDir, sessionKey) 64 if os.path.exists(fname): 65 f = open(fname, "rb") 59 60 storageDir = sessionconfig.retrieve('storageFileDir', self.sessionName) 61 fileName = '%s_%i-%s' % (self.sessionName, hash(self), sessionKey) 62 filePath = os.path.join(storageDir, fileName) 63 64 if os.path.exists(filePath): 65 f = open(filePath, "rb") 66 66 self.__fileLock.acquire() 67 67 sessionData = pickle.load(f) … … 73 73 74 74 def setSession(self, sessionData): 75 sessionStorageFileDir = self.__storageDir()76 75 77 fname=os.path.join(sessionStorageFileDir, sessionData.key) 78 f = open(fname,"wb") 76 storageDir = sessionconfig.retrieve('storageFileDir', self.sessionName) 77 fileName = '%s_%i-%s' % (self.sessionName, hash(self), sessionData.key) 78 filePath = os.path.join(storageDir, fileName) 79 80 f = open(filePath,"wb") 79 81 self.__fileLock.acquire() 80 82 pickle.dump(sessionData, f) … … 83 85 84 86 def delSession(self, sessionKey): 85 sessionStorageFileDir = self.__storageDir() 87 storageDir = sessionconfig.retrieve('storageFileDir', self.sessionName) 88 fileName = '%s_%i-%s' % (self.sessionName, hash(self), sessionKey) 89 filePath = os.path.join(storageDir, fileName) 90 91 if os.path.exists(filePath): 92 self.__fileLock.acquire() 93 os.remove(filePath) 94 self.__fileLock.release() 86 95 87 96 def cleanUpOldSessions(self): 88 97 sessionStorageFileDir = self.__storageDir() 89 98 sessionFileList = os.listdir(sessionStorageFileDir) 90 99 100 filePrefix = '%s_%i' % (self.sessionName, hash(self)) 101 91 102 for sessionKey in sessionFileList: 92 session = self.getSession(sessionKey) 93 if session.expired(): 94 try: 95 os.remove(os.path.join(sessionStorageFileDir, sessionKey)) 96 except: 97 """ the session was probably removed already """ 103 prefix, key = sessionFileList.split('-') 104 if filePrefix == prefix: 105 session = self.getSession(sessionKey) 106 if session.expired(): 107 try: 108 os.remove(os.path.join(sessionStorageFileDir, sessionKey)) 109 except: 110 """ the session was probably removed already """ trunk/cherrypy/lib/filter/sessionfilter/ramsession.py
r298 r380 34 34 35 35 class RamSession(BaseSession): 36 36 37 def __init__(self, sessionName): 37 38 BaseSession.__init__(self, sessionName) trunk/cherrypy/lib/filter/sessionfilter/sessionconfig.py
r377 r380 37 37 } 38 38 39 _sessionDefaults = {40 'sessionFilter.on' : False,41 'sessionFilter.SessionsList' : ['default'],42 'sessionFilter.default.on': True,43 'sessionFilter.default.timeout': 60,44 'sessionFilter.default.cleanUpDelay': 60,45 'sessionFilter.default.storageType' : 'ram',46 'sessionFilter.default.cookiePrefix': 'CherryPySession',47 'sessionFilter.default.storageFileDir': '.sessionFiles'48 }49 50 39 try: 51 40 # the user might not have sqlobject instaled trunk/cherrypy/lib/filter/sessionfilter/sessionfilter.py
r377 r380 12 12 sessions = {} 13 13 14 sessionLists = cpg.config.getAll('sessionFilter.session sList')14 sessionLists = cpg.config.getAll('sessionFilter.sessionList') 15 15 16 16 for sessionPath, sessionList in sessionLists.iteritems(): … … 34 34 sessionList[index] = sessionManager 35 35 36 cpg.config.update({sessionPath: {'sessionFilter.session sList' : sessionList} })36 cpg.config.update({sessionPath: {'sessionFilter.sessionList' : sessionList} }) 37 37 else: 38 if not cpg.config.get('sessionFilter.%s.on' % session, True):39 continue40 41 38 sessionManager = session 42 sessionManager.lastCleanUp = time.time()43 44 cleanUpDelay = sessionconfig.retrieve('cleanUpDelay', sessionManager.sessionName)45 now = time.time()46 lastCleanUp = sessionManager.lastCleanUp47 if lastCleanUp + cleanUpDelay * 60 <= now:48 sessionManager.cleanUpOldSessions()49 39 50 40 sessions[sessionManager.sessionName] = sessionManager … … 129 119 sessionData = getattr(cpg.sessions, sessionName) 130 120 sessionManager.commitCache(sessionData.key) 121 sessionManager.cleanUpCache() 122 123 sessionManager.lastCleanUp = time.time() 124 125 cleanUpDelay = sessionconfig.retrieve('cleanUpDelay', sessionManager.sessionName) 126 now = time.time() 127 lastCleanUp = sessionManager.lastCleanUp 128 if lastCleanUp + cleanUpDelay * 60 <= now: 129 sessionManager.cleanUpOldSessions() 130 131 131 132 132 def beforeMain(self): trunk/cherrypy/lib/filter/sessionfilter/sqlobjectsession.py
r288 r380 35 35 36 36 class SQLObjectSessionDict(BaseSessionDict): 37 38 # it is ok to cache the session data 39 40 noCache = False 37 41 def __init__(self, sqlObject): 38 42 self.__sqlObject = sqlObject … … 108 112 def delSession(self, sessionKey): 109 113 # figure out what to catch when this doesn't work 110 Session.delete(Session.q.session_key== 'abcd')114 Session.delete(Session.q.session_key==sessionKey) 111 115 112 116 #raise SessionNotFoundError trunk/cherrypy/tutorial/tut09_sessionfilter.py
r377 r380 18 18 { 19 19 'global' : {'sessionFilter.on': True}, 20 '/admin' : {'sessionFilter.session sList' : ['admin'] },21 '/forum' : {'sessionFilter.session sList' : ['forum'] }20 '/admin' : {'sessionFilter.sessionList' : ['admin'] }, 21 '/forum' : {'sessionFilter.sessionList' : ['forum'] } 22 22 }) 23 23

