On Fri, 2003-09-26 at 12:42, Milos Prudek wrote:
Session data containers contain session data objects, each of which should be unique for a particular browser (user). It's true that each developer will share the same session namespace for a given user, but you don't need to limit yourself to storing string-valued key-value pairs in the top-level namespace of the session data object. For example, instead of:
context.REQUEST.SESSION['avariable'] = 'avalue'
... you can do something like this:
my_app_namespace = context.REQUEST.SESSION.get('my_app', {}) my_app_namespace['avaraible'] = 'avalue' context.REQUEST.SESSION.set('my_app', my_app_namespace)
Is this the only way to have separate session objects in an application?
The result of this isn't two separate session objects. 'my_app' is just a namespace. There can be any number of namespaces in the same session data object. It's the 'recommended way', FWIW.
I tried to place two Session Data Managers in one folder. I tolds the first of them to Place SESSION in REQUEST object as "ses1", and the second one to place it as "ses2". Zope seems to use only the first one. When I listed the REQUEST, it contained "ses1" and "SESSION" (inherited from default Session Data Managers).
Having two session data managers in the same folder isn't really supported.
That made me think that I can at least place a new Session Data Managers hierarchic subfolders and all of them will be visible. A drawing will easier to understand:
folderA/ SDM1 (place session as "ses1") folderB/ SDM2 (place session as "ses2") folderC/ SDM3 (place session as "ses3")
Surprisingly, when I print REQUEST from folderC, there are only two session objects visible: SESSION and ses3.
Why is this?
That's not what I see (Zope 2.7 head). When I print the request, I get SESSION, ses1, ses2, and ses3. This should indeed work (although I'm not sure you'd really want to do this, namespaces seem easier and clearer). - C -- Chris McDonough <chrism@zope.com> Zope Corporation