|
Amir Salihefendic
amix at amix.dk
Thu Aug 12 15:13:01 EDT 2004
Hello.
I welcome myself to this list ;-)
I have a question about how to handle sessions correctly.
I am creating a simple login system (just messing around with
mod_python).
Let's say that we have a page called index.py and we are using the
publisher handler.
Example one:
def createSession(req):
new_session = Session.Session(req)
return new_session.id()
def getSameSession(req):
same_session = Session.Session(req)
return same_session.id()
This works ok! They have the same sid. I.e. you first call
index.py/createSession and then index.py/getSameSession
Example two:
def createSession(req):
new_session = Session.Session(req)
return getSameSession(req)
def getSameSession(req):
same_session = Session.Session(req)
return same_session.id()
This does not work - it makes an infinitive loop..! Now to fix this
you need to unlock the session in createSession (.. I have no clue why
you have to do this..?). And then you need to restart apache... i.e.:
def createSession(req):
new_session = Session.Session(req)
new_session.unlock()
return getSameSession(req)
But this does not work quite well.. If you delete the Session:
def deleteSession(req):
same_session = Session.Session(req)
same_session.invalidate()
return "Deleted"
And then you do this:
def createSession(req):
new_session = Session.Session(req)
new_session.save()
new_session.unlock()
req.write(new_session.id())
return getSameSession(req)
def getSameSession(req):
same_session = Session.Session(req)
return "\n%s" % same_session.id()
First time the id's aren't same - after that they are the same.
Now, I could solve this by doing internal redirects i.e. instead of
calling "return getSameSession" I could go util.redirect... But that
isn't smart...
I could also store some variables in the request object. I.e.
req.login["Logged_in"] = True. i.e.:
createSession:
- Create session
- Create req.login["Logged_in"]
getSameSession:
- Check if req.login["Logged_in"] is set.
- If req.login["Logged_in"] isn't set (we aren't doing an "internal"
call), then try to load the variables from our session.
But how secure is this? And is there another way to handle this?
I could also store the whole session object in the req - - but .. it
isn't very smart.
And why does it happen (quite often!) that the session handling make
Apache server spin in an infinitive loop!?
Kind regards
Amir Salihefendic
-----
What we do in life echoes in eternity
|