Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 231

Show
Ignore:
Timestamp:
06/02/05 14:38:17
Author:
mikerobi
Message:

fixed major sessionCookie bug

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/ticket-132/cherrypy/lib/session/sessionfilter.py

    r225 r231  
    44from cherrypy._cpdefaults import _sessionTypes 
    55 
    6 import os.path, time 
     6import os.path, time, re 
    77 
    88def _getSessions(): 
     
    3131            cpg.config.update( 
    3232                              { 
    33                                 '/' : {'%s.sessionManager' % sessionName : sessionManager} 
     33                                sessionPath : {'%s.sessionManager' % sessionName : sessionManager} 
    3434                              } 
    3535                             ) 
     
    5353       cpg = cherrypy.cpg 
    5454       sessions = _getSessions() 
     55       sessionKeys = self.getSessionKeys() 
    5556       for sessionName in sessions: 
    5657           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) 
    5866     
    59     def getSessionKey(self): 
     67    def getSessionKeys(self): 
    6068        """  
    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 
    6470        """ 
     71        cpg = cherrypy.cpg 
    6572         
    66         cpg = cherrypy.cpg 
    67         sessionName = cpg.config.get('session.new', None) 
     73        sessionKeys= {} 
    6874         
    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                                  }) 
    7384            try: 
    74                 return cpg.request.simpleCookie[cookieName].value 
     85                sessionKeys[sessionName] = cpg.request.simpleCookie[cookieName].value 
    7586            except: 
    76                 return None 
     87                sessionKeys[sessionName] = None 
     88        return sessionKeys 
    7789 
    7890    def setSessionKey(self, sessionKey, sessionName): 
     
    8597         
    8698        cookieName = cpg.config.get('%s.cookieName' % sessionName, None) 
    87         if not cookieName: 
    88             cookieName = cpg.config.get('sessionMap.cookieName') + '_' + sessionName 
    8999 
    90100        cpg.response.simpleCookie[cookieName] = sessionKey 
    91101        cpg.response.simpleCookie[cookieName]['version'] = 1 
    92102 
    93         path = cpg.config.get('session.new', returnSection = True) 
     103        path = cpg.config.get('%s.sessionManager' % sessionName, returnSection = True) 
    94104        cpg.response.simpleCookie[cookieName]['path'] = path 
    95105 
    96     def loadSessionMap(self, sessionName, sessionManager): 
     106    # this was an important function 
     107    def loadSessionMap(self, sessionName, sessionKey, sessionManager): 
    97108        """ 
    98109        The server calls this function on every request to load that session map 
    99110        """ 
    100         cpg = cherrypy.cpg 
    101          
    102         # First, get sessionKey from wherever it is stored  
    103         sessionKey = self.getSessionKey() 
    104        
    105         if sessionKey: 
    106             # Load session data from wherever it was stored 
    107             sessionMap = sessionManager.get(sessionKey, None) 
    108             if sessionMap == None: 
    109                 sessionKey = None 
    110         # Create a new session if needed 
    111         if not sessionKey or not sessionMap: 
    112             sessionMap = sessionManager.newSession() 
    113             self.setSessionKey(sessionMap.key, sessionManager.name)  
    114         setattr(cpg.request, sessionName, sessionMap) 
    115111 
    116112    def afterRequestHeader(self): 
  • branches/ticket-132/cherrypy/lib/session/sessionmap.py

    r208 r231  
    3131 
    3232from errors import SessionImmutableError 
    33  
    34 import pprint 
    35 pp = pprint.PrettyPrinter(indent=2) 
    3633 
    3734class SessionMapClass(dict): 

Hosted by WebFaction

Log in as guest/cpguest to create tickets