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

Changeset 765

Show
Ignore:
Timestamp:
10/31/05 11:36:19
Author:
rdelon
Message:

Clean session in onEndResource instead of beforeFinalize

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/lib/filter/sessionfilter.py

    r764 r765  
    9191        cherrypy.request._session = EmptyClass() 
    9292        sess = cherrypy.request._session 
    93         sess.toBeCleaned = True 
    9493        now = datetime.datetime.now() 
    9594        # Dont enable session if sessionFilter is off or if this is a 
     
    163162    def beforeFinalize(self): 
    164163        def saveData(body, sess): 
    165             try: 
    166                 # If the body is a generator, we have to save the data 
    167                 #   *after* the generator has been consumed 
    168                 if isinstance(body, types.GeneratorType): 
    169                     for line in body: 
    170                         yield line 
    171                  
    172                 # Save session data 
    173                 t = datetime.timedelta(seconds = sess.sessionTimeout * 60) 
    174                 expirationTime = datetime.datetime.now() + t 
    175                 sess.sessionStorage.save(sess.sessionID, sess.sessionData, 
    176                                          expirationTime) 
    177                 if sess.locked: 
    178                     # Always release the lock if the user didn't release it 
    179                     sess.sessionStorage.releaseLock() 
    180                  
    181                 # If the body is not a generator, we save the data 
    182                 #   before the body is returned 
    183                 if not isinstance(body, types.GeneratorType): 
    184                     for line in body: 
    185                         yield line 
    186             except: 
    187                 # Can't use try/finally because of yield 
    188                 self._clean() 
    189                 raise 
    190             self._clean() 
     164            # If the body is a generator, we have to save the data 
     165            #   *after* the generator has been consumed 
     166            if isinstance(body, types.GeneratorType): 
     167                for line in body: 
     168                    yield line 
     169             
     170            # Save session data 
     171            t = datetime.timedelta(seconds = sess.sessionTimeout * 60) 
     172            expirationTime = datetime.datetime.now() + t 
     173            sess.sessionStorage.save(sess.sessionID, sess.sessionData, 
     174                                     expirationTime) 
     175            if sess.locked: 
     176                # Always release the lock if the user didn't release it 
     177                sess.sessionStorage.releaseLock() 
     178             
     179            # If the body is not a generator, we save the data 
     180            #   before the body is returned 
     181            if not isinstance(body, types.GeneratorType): 
     182                for line in body: 
     183                    yield line 
    191184         
    192185        sess = cherrypy.request._session 
     
    198191        #   either before or after the body is returned 
    199192        cherrypy.response.body = saveData(cherrypy.response.body, sess) 
    200         sess.toBeCleaned = False 
    201193 
    202194    def onEndResource(self): 
    203         # If RequestHandled is raised, beforeFinalize and afterErrorResponse 
    204         #   are not called, so we release the session here 
    205         sess = cherrypy.request._session 
    206         if sess.toBeCleaned: 
    207             self._clean() 
     195        self._clean() 
    208196 
    209197    def afterErrorResponse(self): 

Hosted by WebFaction

Log in as guest/cpguest to create tickets