[mod_python] Publisher Weirdness

Graham Dumpleton grahamd at dscpl.com.au
Mon Feb 27 16:28:23 EST 2006


marinus van aswegen wrote ..
> Hi Graham
> 
> I thought that my session line will not just create the session but will
> access the session for that request?

No it doesn't.

What you will need to do is to use a scheme whereby you cache the
first created session object for later access. The common convention
for this is to save it as "req.session".

def _get_session(req):
  if not hasattr(req,"session"):
    req.session = Session.Session(req, secret = config.cookie_passwd)
    ... perform any first time initialisation etc.
  return req.session

def _validate_session(req):
    session = _get_session(req)
    ....

def test(req):
  _validate_session(req)
  session = req.session
  ...

BTW, ensure you put an underscore before these utility functions
else they will be directly accessible to remote users with the right
URL. The underscore will hide them.

PS, please try and keep replies on the mailing list by using "Reply All"
and not just "Reply".

Graham

> On 2/27/06, Graham Dumpleton <grahamd at dscpl.com.au> wrote:
> >
> >
> > On 27/02/2006, at 7:36 PM, marinus van aswegen wrote:
> >
> > > def validate_session(req):
> > >     """
> > >     this function must be called prior to all function to
> > >     ensure that the user is autenticated
> > >     """
> > >
> > >     # get the session for this request
> > >     session = Session.Session(req, secret = config.cookie_passwd)
> > >      .....
> >
> > > def test(req):
> > >
> > >     validate_session(req)
> > >
> > >     session = Session.Session(req, secret = config.cookie_passwd)
> >
> > Here is your first problem. The validate_session() function has already
> > created a session object. Creating the second here for the same request
> > will cause a deadlock.
> >
> > There are various other things which could be done better, but will just
> > point out this obvious thing for now.
> >
> > Graham
> >


More information about the Mod_python mailing list