[Zope] session management

Alexander Staubo alex@mop.no
Mon, 16 Aug 1999 09:11:24 +0200


How about overloading URL traversal?

Couldn't you write a product which essentially let you embed the session
state in a part of the URL, without touching the actual query string?
Eg., assuming objects /Commerce and /Book, you might have an URL such
as:

 
http://myserver/Commerce/420727498471040a432043f85090/Book/Buy?id=542384
32

Here, the parameter following Commerce is a packed (possibly compressed)
dictionary -- or a key into a server-stored gob of session information.
Since the browser will treat this part of the URL as a parent
collection, there is no need to explicitly pass this information to any
hyperlinks or form targets.

The only problem I see with this scheme is that use of absolute_url()
breaks the acquisition, but this is a small sacrifice to make.

Not having explored the world of traversal overloading in Zope, I
wouldn't know if this is entirely doable -- traversal must support
passing parts of the URL back to the standard traversal engine, that's
the key part.

-- 
Alexander Staubo             http://www.mop.no/~alex/
"QED?" said Russell.
"It's Latin," said Morgan. "It means, 'So there you bastard'."
--Robert Rankin, _Nostramadus Ate My Hamster_

> -----Original Message-----
> From: Anthony Pfrunder [mailto:s341625@student.uq.edu.au]
> Sent: 16. august 1999 06:29
> To: TR Henigson
> Cc: zope@zope.org
> Subject: Re: [Zope] session management
> 
> 
> On Sun, 15 Aug 1999, TR Henigson wrote:
> 
> > Has anyone built an object for managing session information
> > in URL's or with cookies between client requests? Is anyone
> > developing one? If such an object does not exist, how would
> > I best implement session management for an e-commerce app?
> > Thank you.
> 
> I believe that DigiCool will be releasing a Membership 
> component as part
> of the Zope Portel Toolkit (ZPT).  This should implement 
> standard session
> management however, I don't know when this will be released 
> (check the ZPT
> timeline posted a few weeks back, membership is last ;)
> 
> The general way I solve session management depends on what 
> you want to do.
> If you just require a Wizard style 1-2-3-4 steps type session simply
> create a dictionary which is stored in your REQUEST variable,
> packed/unpacked into hidden fields in a hidden form. ie
> 
> # Make a variable in the namespace
> <dtml-var "REQUEST.set(mydict, [dict])">
> 
> <dtml-in REQUEST.FORMS.xx>
> 	# Update it for the hidden elements in your form
> 	<dtml-var "_['mydict'][entry] = _[sequence-item/index]">
> </dtml-in>
> 
> # Do some stuff with mydict[items]
> 
> # Pack up the result for next link
> <dtml-in _['mydict']>
> 	<dtml-var "_['url'] = _['url'] + urlencode(_['sequence-item'],
> _['mydict'][sequence-item])">
> </dtml-in>
> 
> # Store url as link 
> <a href=<dtml-var url>>Next step</a>
> 
> The best way to do this generally is to override url.absolute 
> or some such
> function and wrap all links in it.  This way, all links 
> automagically have
> the session stuff 
> 
> The other way is to use cookies.  Here, you need include a 
> cookie monster
> in each page request.  Refer to DTML guide for info on this.
>  
> Cheers,
> 
> Anthony Pfrunder
> 
> 
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://www.zope.org/mailman/listinfo/zope
> 
> (To receive general Zope announcements, see:
> http://www.zope.org/mailman/listinfo/zope-announce
> 
> For developer-specific issues, zope-dev@zope.org -
> http://www.zope.org/mailman/listinfo/zope-dev )
>