|
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
>
|