Edgewall Software

Ticket #8468: t8468-session_save-r8488-011.diff

File t8468-session_save-r8488-011.diff, 2.1 KB (added by osimons, 3 years ago)

0.11 patch with early session save + strings as session values.

  • trac/web/main.py

    diff --git a/trac/web/main.py b/trac/web/main.py
    a b  
    4646from trac.util.text import exception_to_unicode, shorten_line, to_unicode 
    4747from trac.util.translation import _ 
    4848from trac.web.api import * 
    49 from trac.web.chrome import Chrome 
     49from trac.web.chrome import Chrome, add_warning 
    5050from trac.web.clearsilver import HDFWrapper 
    5151from trac.web.href import Href 
    5252from trac.web.session import Session 
     
    214214                    else: # Genshi 
    215215                        template, data, content_type = \ 
    216216                                  self._post_process_request(req, *resp) 
     217                        try: 
     218                            # Give the session a chance to persist changes 
     219                            req.session.save() 
     220                        except Exception, e: # TracDatabaseError (#6348) 
     221                            add_warning( 
     222                                req, _("Changes to user session couldn't be " 
     223                                       "saved (%(err)s)", 
     224                                       err=exception_to_unicode(e))) 
    217225                        if 'hdfdump' in req.args: 
    218226                            req.perm.require('TRAC_ADMIN') 
    219227                            # debugging helper - no need to render first 
     
    224232                        else: 
    225233                            output = chrome.render_template(req, template, 
    226234                                                            data, content_type) 
    227                             # Give the session a chance to persist changes 
    228                             req.session.save() 
    229235                            req.send(output, content_type or 'text/html') 
    230236                else: 
    231237                    self._post_process_request(req) 
  • trac/web/session.py

    diff --git a/trac/web/session.py b/trac/web/session.py
    a b  
    4242        else: 
    4343            self.authenticated = False 
    4444 
     45    def __setitem__(self, key, value): 
     46        dict.__setitem__(self, key, unicode(value)) 
     47 
    4548    def get_session(self, sid, authenticated=False): 
    4649        self.env.log.debug('Retrieving session for ID %r', sid) 
    4750