1.15.4.4 web.wsgi.session - Session Handling

The web.wsgi.session module provides one class Session which adds the following information to the environ dictionary based on the parameters specified in the class constructor.

environ['web.session.driver']
A Driver object as returned by web.session.driver()

environ['web.session.manager']
A Manager object as returned by web.session.manager()

environ['web.session.store']
A session Store object as returned by environ['web.session.manager'].store(app

The web.wsgi.session.Session middleware requires the presence of the Database and Environment middleware and can be used as shown in the example below:

from web.wsgi import *

class simpleApp(base.BaseApplication):

    def printPage(self, title, url, link, url2, link2, data):
        self.output("""
            <html>
            <h1>%s</h1>
            <p><a href="%s">%s</a></p>
            <p><a href="%s">%s</a></p>
            <p>%s</p>
            </html>"""%(title, url, link, url2, link2, data)
        )
    def start(self):
        # Write a simple application
        if not self.environ['web.session.manager'].created:
            if self.environ['web.cgi'].has_key('destroy') and self.environ['web.cgi']['destroy'].value == 'True':
                self.environ['web.session.manager'].destroy(ignoreWarning=True, sendCookieHeaders=False) 
                self.headers.append(self.environ['web.session.manager'].response_headers[-1])
                self.printPage(
                    'Session Destroyed', 
                    self.environ['SCRIPT_NAME'], 
                    'Start Again', '','',''
                )
            else:
                self.environ['web.session.manager'].setExpire(self.environ['web.session.manager'].expireTime+5)
                data = []
                data.append('SessionID:  ' +self.environ['web.session.manager'].sessionID)
                data.append('Store Keys: '+str(self.environ['web.session.store'].keys()))
                data.append('Store App:  '+self.environ['web.session.store'].app)
                data.append('Variable1:  '+str(self.environ['web.session.store']['Variable1']))
                data.append('ExpireTime: '+str(self.environ['web.session.manager'].expireTime))
                self.printPage(
                    'Welcome back', 
                    self.environ['SCRIPT_NAME'], 
                    'Visit Again', 
                    self.environ['SCRIPT_NAME']+'?destroy=True', 
                    'Destroy Session', '<p>Every time you visit this page the expiry time increases 5 seconds</p>'+
                    '</p><p>'.join(data)
                )
        else:
            self.environ['web.session.store']['Variable1'] = 'Python Rules!'
            self.printPage(
                'New Session Started',
                self.environ['SCRIPT_NAME'], 
                'Visit Again', '', '',
                "Set variable1 to 'Python Rules!'"
            )
        # Save changes
        self.environ['web.database.connection'].commit()

application = error.Error(
    database.Database(
        environment.Environment(
            session.Session(
                cgi.CGI(
                    simpleApp(),
                ),
                app = 'testApp',
                expire = 10,
                setupEnvironment = 1
            ),
            name = 'testEnv',
            storage = 'database',
        ),
        adapter = 'snakesql',
        database = 'wsgi-session',
        autoCreate = 1
    ),
)

You can test this example by running the WSGI server scripts/WSGIServer.py and visiting http://localhost:8000/session