Using session with reloader
| Other languages: français | … | 
Problem
There are some issues in using sessions when running the application in debug mode. Is there any work-around?
Solution
web.py runs the program in debug mode when run using the builtin webserver.
Simplest fix for this is to disable debug mode, which can be done by setting web.config.debug = False.
import web
web.config.debug = False
# rest of your code
If you want to use sessions in debug mode then here is a work-around.
Since debug mode enables module reloading, the reloader loads the main module twice (once as main and once with its name), 2 session objects will be created. This can be avoided by storing the session in some global place to avoid creating the second one.
Here is a sample code which saves session in web.config.
import web
urls = ("/", "hello")
app = web.application(urls, globals())
if web.config.get('_session') is None:
    session = web.session.Session(app, web.session.DiskStore('sessions'), {'count': 0})
    web.config._session = session
else:
    session = web.config._session
class hello:
   def GET(self):
       print 'session', session
       session.count += 1
       return 'Hello, %s!' % session.count
if __name__ == "__main__":
   app.run()
