= Problem = You wish to store server-side information about client agents; this information should follow around users as they browse through the application. = Solution = Enable sessions by using the `SessionPublisher` class instead of the regular `Publisher`. In your top-level script, simply do: {{{ from quixote.publish import SessionPublisher ... publisher = SessionPublisher() }}} = Discussion = `SessionPublisher` uses two auxiliary classes: * `SessionManager` is a singleton (meaning there's only one instance of it) that's responsible for creating new Sessions and storing them. * `Session` contains information about the session. Most of its attributes are of little interest to a web application programmer; the single exception is the `.user` attribute, which you can use to record user information. The data type for `.user` isn't defined, so you can set it to a string, an instance of your own User class, or whatever you wish. The [[http://www.mems-exchange.org/software/dulcinea/|Dulcinea package]] includes a `User` class that you may want to look at. The standard version of `SessionManager` stores sessions in a Python dictionary. This means that you must be invoking Quixote through some mechanism that uses long-lived processes; this rules out CGI, but any of FastCGI/SCGI/mod_python will work fine. If you have multiple processes, though, sessions will not be shared between them. For such situations you would have to write a `SessionManager` subclass that stored sessions in a relational database or disk file. ---- CategoryCookbook