[Zope] concurrent logins and Zope

Oliver Bleutgen myzope@gmx.net
Thu, 25 Jul 2002 12:21:21 +0200


Carlo Giomini wrote:
> Hi everybody,
> I'd like to know if Zope can keep track of concurrent logins of the same
> user and treat them independently.
> 
> Let's say user 'foo' connects to a portal and has many tasks to do (at the
> same time). He keeps an open browser window for each of them, logging in
>>from each window (from now on I will call 'session' the whole sequence of
> actions issued from the same browser window, starting from login up to
> logout):
> 
> what I'm thinking of is having the possibility to 'isolate' one login from
> another (of the same user at the same time) and keep track of each of
> these 'sessions' independently from one another: does Zope support this
> kind of task some way? I mean does it have internal structures, APIs,
> functions etc to do this or do I have to code the whole mechanism from
> scratch? 
> 
> It's worth noting that the point is not only telling one browser window
>>from another (the BrowserIdManager fits well here), but also (mostly)
> keeping track of every 'session' (group of actions issued from the same
> browser by the same user) in parallel with every other. 
> 
> Of course the opposite situation could come handy as well: treating all
> the requests (issued by the same user) as an unique 'session', without
> regard of the browser window these were issued from. 
> 
> Any help will be appreciated (also references to source code). Thanks in
> advance, cheers,
> 	Carlo.
> 
> P.S. With 'keeping track of a session' I mean keeping track of the status 
> 	of the user related to that session, in some data structure like
> 	a table, dictionary, etc.  

I think zope has no API to somehow keep track of session inside the the 
same browser. This means also, that it's not possible to differentiate 
browser windows of the same browser, that is not possible with 
BrowserIDManager AFAIK.
The reason is, that there is simply not the instrumentary in http to 
keep state information which could fullfill that (barring some sort of 
hidden attributes/form stuff (ab)use).

But you could use the cookie domain property to seperate your sessions. 
Let's say you need two session, like "edit" and "view", then you could 
introduce a new host, say edit.yourhost.com. That way the cookies could 
be seperated. With some virtual host/apache config trickery you could 
scale that relativly well, adding some dns trickery to the game would 
make it possible to scale that ad infinitum. Didn't have to do that 
before, but it's possible to direct abc.somedomain.com to the same 
webserver regardless what abc is.

Another, perhaps simpler, possibility is to use the path to restrict the 
effect of a cookie in your server. Add a "work" folder in to top level 
of your zope hierachy and restrict the cookie path of your "work" cookie 
to that folder. Via acquisition, you can now inject the work folder on 
top of your normal folder (i.e. /content/foldera/index_html gets 
/work/content/foldera/index_html) and the "work" cookie is only active 
there. As above with the domain thing, this is scalable ad infinitum 
when you use a special object instead of a simple folder - for instance 
a python script - and use that to insert arbitrary elements at the 
beginning of your path.


cheers,
oliver