[mod_python] Session management

Chris Jackson christopher.jackson at gmail.com
Thu Jan 13 16:35:05 EST 2005


Hmm... the session object is still dropping (being lost) , the
recovered (being remember) from time to time.

Brief view of the Publisher Handler setup.
*Note the sess variable is not visible to other functions unless
declared globally.

[Global Space]
sess = None

def login(req):
   global sess
   sess = Session(req)
   sess['this']  = 'that'
   ...<more code>...
   sess.save()
   return

def otherFunc(req):
    global sess
    sess = Session(req)  # tested with and without this line (correct?)
    sess.load()
    ...<more code>...
    sess.save()
    return

I can see the session being written to a file in a serialized way in /tmp
    mp_sess.dbm.bak
    mp_sess.dbm.dat
    mp_sess.dbm.dir

I've also executed a:

    watch -d 'ls -l /tmp/mp*'

And upon creating new sessions...via separate browsers... I have seen the file
size fo the above files grow in real-time, which means that data is in
fact being added to the sessions which are partly human-readable.

However, the problem I'm having is that occasionally when
transitioning to other pages such as http://mysite.com/otherFunc,

will return 'NoneType' object has no attribute 'load'  # referring to
the sess object.

So I click the [BACK] button in the browser and re-submit the data. 
After about 7 times, the script all of a sudden recognizes the sess
object.  Sometimes this error does not happend and loads on the first
try. How can I prevent this behavior?

~= Chris =~


On Wed, 12 Jan 2005 23:48:39 +0900, Hiroaki KAWAI <kawai at iij.ad.jp> wrote:
> Of cource, most popular and easiest way is to use Session module.
> Session will store the information somewhere in 'session storage' that
> the module knows how to get it, and the actual mechanism is hidden.
> # i.e., inter-process communication via file or database.
> 
> So, make sure that you save the session information to the session
> storage in each request processing as Ron says. ;-)
> 
> 
> Chris Jackson <christopher.jackson at gmail.com> wrote:
> > Ah, that makes sense...Now I just need to find which "inter-process"
> > technique I should be using in order to maintain consistency ;)
> >
> > ~= Chris =~
> >
> >
> > On Wed, 12 Jan 2005 12:55:47 +0900, Hiroaki KAWAI <kawai at iij.ad.jp> wrote:
> > > > > Depending on what type of apache configuration you run, one or more
> > > > > interpreters will be used. Sometimes interpreters die and new ones get
> > > > > created.
> > > >
> > > > Hmm...it's interesting you say that somtimes the interpreters die and
> > > > new ones get created because I'm running into a "problem" where I will
> > > > test a mod_python page and it will works perfectly several times again
> > > > and again, but then i'll test it out again, and the interpreter seems
> > > > to "forget" the values.  I'll keep testing the page with the same
> > > > values, and then the page will work again.
> > >
> > > One interpreter is created per one apache child process. If you're running
> > > prefork MPM (and set MaxRequestsPerChild or have multiple spare child
> > > servers), you're posting a HTTP request sometimes to the same interpreter,
> > > sometimes to other interpreter.
> > > I think one of 'inter-process' techniques is useful for what you're
> > > trying.
> > > # If I'm saying wrong, someone please correct. :-)
> > >
> > > ---Hiroaki Kawai
> > >
> > > _______________________________________________
> > > Mod_python mailing list
> > > Mod_python at modpython.org
> > > http://mailman.modpython.org/mailman/listinfo/mod_python
> > >
> 
> ---Hiroaki Kawai
> 
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>


More information about the Mod_python mailing list