Changeset 231
- Timestamp:
- 06/02/05 14:38:17
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/ticket-132/cherrypy/lib/session/sessionfilter.py
r225 r231 4 4 from cherrypy._cpdefaults import _sessionTypes 5 5 6 import os.path, time 6 import os.path, time, re 7 7 8 8 def _getSessions(): … … 31 31 cpg.config.update( 32 32 { 33 '/': {'%s.sessionManager' % sessionName : sessionManager}33 sessionPath : {'%s.sessionManager' % sessionName : sessionManager} 34 34 } 35 35 ) … … 53 53 cpg = cherrypy.cpg 54 54 sessions = _getSessions() 55 sessionKeys = self.getSessionKeys() 55 56 for sessionName in sessions: 56 57 sessionManager = sessions[sessionName] 57 self.loadSessionMap(sessionName, sessionManager) 58 sessionKey = sessionKeys.get(sessionName, None) 59 60 sessionDict = sessionManager.get(sessionKey, None) 61 62 if not sessionKey or not sessionDict: 63 sessionDict = sessionManager.newSession() 64 self.setSessionKey(sessionDict.key, sessionManager.name) 65 setattr(cpg.request, sessionName, sessionDict) 58 66 59 def getSessionKey (self):67 def getSessionKeys(self): 60 68 """ 61 Returns the current sessionkey, return None if there is no session. 62 Applications should never need to call this function. It is public 63 so it can be redifined (to use url based sessions or other magic) 69 Returns the all current sessionkeys as a dict 64 70 """ 71 cpg = cherrypy.cpg 65 72 66 cpg = cherrypy.cpg 67 sessionName = cpg.config.get('session.new', None) 73 sessionKeys= {} 68 74 69 cookieName = cpg.config.get('%s.cookieName' % sessionName, None) 70 if not cookieName: 71 cookieName = cpg.config.get('sessionMap.cookieName') + '_' + sessionName 72 if sessionName: 75 sessions = cpg.config.getAll('session.new') 76 for sessionPath in sessions: 77 sessionName = sessions[sessionPath] 78 cookieName = cpg.config.get('%s.cookieName' % sessionName, None) 79 if not cookieName: 80 cookieName = cpg.config.get('session.cookieName') + '|' + re.sub('/','_', sessionPath) + '|' + sessionName 81 cpg.config.update({ 82 sessionPath : {'%s.cookieName' % sessionName : cookieName} 83 }) 73 84 try: 74 returncpg.request.simpleCookie[cookieName].value85 sessionKeys[sessionName] = cpg.request.simpleCookie[cookieName].value 75 86 except: 76 return None 87 sessionKeys[sessionName] = None 88 return sessionKeys 77 89 78 90 def setSessionKey(self, sessionKey, sessionName): … … 85 97 86 98 cookieName = cpg.config.get('%s.cookieName' % sessionName, None) 87 if not cookieName:88 cookieName = cpg.config.get('sessionMap.cookieName') + '_' + sessionName89 99 90 100 cpg.response.simpleCookie[cookieName] = sessionKey 91 101 cpg.response.simpleCookie[cookieName]['version'] = 1 92 102 93 path = cpg.config.get(' session.new', returnSection = True)103 path = cpg.config.get('%s.sessionManager' % sessionName, returnSection = True) 94 104 cpg.response.simpleCookie[cookieName]['path'] = path 95 105 96 def loadSessionMap(self, sessionName, sessionManager): 106 # this was an important function 107 def loadSessionMap(self, sessionName, sessionKey, sessionManager): 97 108 """ 98 109 The server calls this function on every request to load that session map 99 110 """ 100 cpg = cherrypy.cpg101 102 # First, get sessionKey from wherever it is stored103 sessionKey = self.getSessionKey()104 105 if sessionKey:106 # Load session data from wherever it was stored107 sessionMap = sessionManager.get(sessionKey, None)108 if sessionMap == None:109 sessionKey = None110 # Create a new session if needed111 if not sessionKey or not sessionMap:112 sessionMap = sessionManager.newSession()113 self.setSessionKey(sessionMap.key, sessionManager.name)114 setattr(cpg.request, sessionName, sessionMap)115 111 116 112 def afterRequestHeader(self): branches/ticket-132/cherrypy/lib/session/sessionmap.py
r208 r231 31 31 32 32 from errors import SessionImmutableError 33 34 import pprint35 pp = pprint.PrettyPrinter(indent=2)36 33 37 34 class SessionMapClass(dict):

