Hello,
I'm writing a SessionManager subclass that deletes sessions
after they've been inactive for a certain period. I'm a Quixote
newbie, and am hoping that you can take a look at this simple
class and tell me if I've made any important oversights.
A related question is whether I can trap SessionErrors (for
instance caused by my timing out sessions) with the standard
_q_exception_handler() function, or whether _q_exception_handler
only catches PublishError.
Thanks for your advice,
Jesse
------------------------------------------------------------
from quixote.session import SessionManager
import time
# This is a subclass of Quixote's SessionManager that provides for a session
# timeout parameter. When a new session object is requested, it will look
# through all of its current sessions and expire those which have remained
# unused for a certain period.
class SessionManagerTimeout(SessionManager):
def __init__(self, session_class=None, session_mapping=None, timeout=None):
SessionManager.__init__(self, session_class = session_class,
session_mapping = session_mapping)
self.timeout = timeout
def maintain_session(self, request, session):
if self.timeout and session.has_info() and session.id is None:
# These are the criteria by which the maintain_session() method of
the
# default SessionManager decides to store a new session object in
its
# internal dictionary, and thus it is here that we must look through
the
# extant sessions in that dictionary to delete stale ones.
extant_sessions = self.values()
curtime = time.time()
for s in extant_sessions:
if s.get_access_age(curtime) > self.timeout:
del self[session.id]
SessionManager.maintain_session(self, request, session)
------------------------------------------------------------