-> Seeing as I use postgres for the rest of my application, it is
-> probably most sensible to implement a session manager that stores
-> sessions in a postgresql database. I considered this, pickling the
-> sessions, but first checked to see if I couldn't get away with not
-> doing this work.
->
-> There is of course DirMapping. The only filesystem on my webserver
-> using reiserfs is /tmp, so if I can figure out "secure tempdir
-> creation", maybe I should use DirMapping in /tmp? I also looked at
-> shelve, thought that's the way to go, except that merely doing:
->
-> (WebsitePublisher.__init__)
-> sessionmapping = shelve.open('/var/www-data/quixote-sessions')
-> kwargs['session_mgr'] = SessionManager(WebsiteSession,
-> sessionmapping)
->
-> doesn't work - the data never gets flushed to disk. I create at least
-> one session then open the file with shelve in an interactive
-> interpreter, it contains no keys... (I derive from SessionPublisher,
-> since I use scgi, and I can't easily pass parameters to the
-> publisher.)
Try over-riding the publish() function to flush the session mapping; for
example, in Cartwheel, I need to clean up a database handle, and so I do
this:
def publish(self, stdin, stdout, stderr, env):
"""
Override the default publish() function to also release the
object manager at the end of things.
"""
try:
SessionPublisher.publish(self, stdin, stdout, stderr, env)
finally:
cartwheel.website.release_object_manager()
# this is where we should save/update the session, no?
(note the prescient last comment; my session handling isn't good at the
moment ;)
cheers,
--titus