[Zope] Session transferring problem

Lubos Culen mirsoft@systinet.com
Thu, 17 Apr 2003 19:21:14 +0200


Chris,

well, I found yet better solution than URL0, because I didn't like that it
required to have "automatic session encoding in url" in browser_id_manager
switched on - so it encoded session data *always* always to all users (even
to users who have cookies switched on, so it could go through cookies),
which didn't met the requirements for me. So, I finally found this BASE tag,
which works in 99.9% cases:

<base href=""
tal:condition="not:python:here.browser_id_manager.isBrowserIdFromCookie()"
tal:attributes="href string:${request/SERVER_URL}${request/PATH_INFO}/"/>

This means, that BASE tag is overwritten only if user has cookies switched
off, otherwise it will "manually" create the base path. Only in case of some
weird Javascripts and when user hasn't cookies it did some small issues, but
this is satisfactory for me for now (because users of these Javascripts need
to have cookies on anyway). Now I can leave the "automatic session encoding
in url" in browser_id_manager switched off and I'm encoding session data in
URL 'manually' (through Python script) only when user has cookies switched
off.

I know it was a bit complicated way, but the requirements have been tough...
:)

-Lubos

> -----Original Message-----
> From: Chris McDonough [mailto:chrism@zope.com]
> Sent: 17. dubna 2003 15:42
> To: Lubos Culen
> Cc: Zope mailinglist
> Subject: RE: [Zope] Session transferring problem
>
>
> Lubos,
>
> Thanks!  I appreciate you filing the issue.  Out of curiosity, does the
> URL0 solution work in most cases?
>
> - C
>
>
> On Thu, 2003-04-17 at 03:22, Lubos Culen wrote:
> > Chris,
> >
> > I see there was a bit misunderstanding in 'checked off' - I meant
> > 'unchecked' :) I checked it on and it behaves as you wrote
> already. However,
> > I will submit an bug issue into the bug collector.
> >
> > Thanks,
> >
> > -Lubos.
> >
> > > -----Original Message-----
> > > From: Chris McDonough [mailto:chrism@zope.com]
> > > Sent: 16. dubna 2003 19:26
> > > To: Lubos Culen
> > > Cc: Zope mailinglist
> > > Subject: RE: [Zope] Session transferring problem
> > >
> > >
> > > Lubos,
> > >
> > > The workaround I gave does indeed work for the specific
> example you gave
> > > in the last email.  I'm not sure how it behaves under other
> > > circumstances.  I am not really sure there is a workaround that is
> > > completely general.
> > >
> > > In the first example you give below where you tried URL0, it
> sounds like
> > > you either visited the folder without the session data in the URL or
> > > don't have URL munging turned on in the browser id manager.
> > >
> > > (Just in case:  I may have been unclear when I said "make sure the
> > > 'automatically generate...' box is 'checked off'" in the last email, I
> > > mean make sure that the "automatically generate..." checkbox is
> > > *checked*.)
> > >
> > > The actual fix for the bug is to fix the BASE tag rendering.
> I've looked
> > > at the code but haven't found a straightforward fix for it,
> and I'm out
> > > of time.
> > >
> > > I'd suggest entering this issue into the bug collector at
> > > collector.zope.org so we don't forget about it
> > >
> > > - C
> > >
> > >
> > > On Wed, 2003-04-16 at 13:07, Lubos Culen wrote:
> > > > Chris,
> > > >
> > > > I tried this, but it does doesn't seem to work.
> > > >
> > > > Using the <base href="" tal:attributes="href request/URL0"/>
> > > >
> > > > it generates:
> > > >
> > > > <base href="http://localhost:8080/path/to/www/index_html/" />
> > > >
> > > > (without session data, and the "<a href="testlink">" is not
> translated)
> > > >
> > > >
> > > > I tried also <base href="" tal:attributes="href request/PATH_INFO"/>
> > > > which displayed the session data when called, but it now
> displayed only
> > > > <base href="/_ZopeId/98484417A0xKnA7xHio/path/to/www" />
> > > > - which means that after clicking a link it went to a level
> > > higher and it
> > > > did not find it.
> > > >
> > > > Using this, I played with it a used more with combinations for href
> > > > replacements like:
> > > >
> > > > - string:${request/SERVER_URL}${request/PATH_INFO}
> > > > - string:${request/SERVER_URL}${request/PATH_INFO}/
> > > > - string:${request/SERVER_URL}${request/PATH_INFO}/index_html
> > > >
> > > > , but I have not found any solution, which would be completely
> > > stable and
> > > > compatible. If it works for you, could you possibly send me a *.zexp
> > > > example, which I could inspire from?
> > > >
> > > > Thanks and regards, Lubos.
> > > >
> > > > > -----Original Message-----
> > > > > From: Chris McDonough [mailto:chrism@zope.com]
> > > > > Sent: 16. dubna 2003 16:44
> > > > > To: Lubos Culen
> > > > > Cc: Zope mailinglist
> > > > > Subject: RE: [Zope] Session transferring problem
> > > > >
> > > > >
> > > > > Hi Lubos.
> > > > >
> > > > > As Oliver guessed, this is indeed a problem with the BASE tag
> > > generated
> > > > > by Zope.  This is a bug.
> > > > >
> > > > > To work around it, you can include an explicit BASE tag
> in index_html:
> > > > >
> > > > > <html>
> > > > >   <head>
> > > > >     <base href="" tal:attributes="href request/URL0"/>
> > > > >     <title tal:content="template/title">The title</title>
> > > > >   </head>
> > > > >   <body>
> > > > >    <span tal:content="structure here/content"></span>
> > > > >   </body>
> > > > > </html>
> > > > >
> > > > > I *wanted* to say tal:attributes="href here/absolute_url"
> in the base
> > > > > tag above, but this doesn't do the right thing for some reason.
> > > > >
> > > > > - C
> > > > >
> > > > >
> > > > >
> > > > > On Wed, 2003-04-16 at 10:05, Lubos Culen wrote:
> > > > > > Chris,
> > > > > >
> > > > > > thank you very much for detailed answer. I investigated a bit,
> > > > > and I think
> > > > > > the issue is here:
> > > > > >
> > > > > > Let's say I have DTML document called 'content' in folder
> > > > > 'document'. Let's
> > > > > > say I have link <a href="testlink">testlink</a> inside this
> > > "content"
> > > > > > document.
> > > > > >
> > > > > > Now, when I'm accessing *directly* the 'content' document from
> > > > > the web (e.g.
> > > > > > http://www.mysite.com/document/content ), then the link is
> > > right encoded
> > > > > > with Zope's session ID, exactly as you explained.
> > > > > >
> > > > > > BUT - when I'm accessing this 'content' document *indirectly*
> > > > > (for example,
> > > > > > through some ZPT Page template), then the URL session
> will not be
> > > > > > maintained. Here is concrete example when this happens: if
> > > I create Page
> > > > > > Template at http://www.mysite.com/index_html , which will read
> > > > > the "content"
> > > > > > inside (using <span tal:content="structure
> > > > > here/content"></span>), and if I
> > > > > > will call http://www.mysite.com/document/ , it will display the
> > > > > "content"
> > > > > > document correctly, but the <a href="testlink"> it will
> > > > > translate without
> > > > > > session data. I tried also DTML Methods for templates instead
> > > > > of ZPT, but
> > > > > > the result was the same.
> > > > > >
> > > > > > During all the process, I have "Automatically Encode
> > > Zope-Generated URLs
> > > > > > With A Browser Id" in browser_id_manager switched off.
> > > > > >
> > > > > > Do you have any suggestions?
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Lubos.
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Chris McDonough [mailto:chrism@zope.com]
> > > > > > > Sent: 16. dubna 2003 15:32
> > > > > > > To: Lubos Culen
> > > > > > > Cc: Zope mailinglist
> > > > > > > Subject: Re: [Zope] Session transferring problem
> > > > > > >
> > > > > > >
> > > > > > > Hi Lubos,
> > > > > > >
> > > > > > > I unfortunately can't replicate this behavior.
> > > > > > >
> > > > > > > As long as you've got the "automatically encode
> > > > > Zope-generated URLs with
> > > > > > > a browser id" parameter checked off in your browser id
> > > manager, and as
> > > > > > > long as you don't provide *absolute* urls in your
> links, the URLs
> > > > > > > rendered by the browser should indeed include the URL
> > > fragments which
> > > > > > > identify the session.
> > > > > > >
> > > > > > > OTOH, if you are providing absolute links in the
> content (links
> > > > > > > beginning with a '/' or links that include a protocol like
> > > > > "http://" in
> > > > > > > them), the browser will not take into account the base
> > > url of the page
> > > > > > > and the link will be rendered as written.
> > > > > > >
> > > > > > > Eg:
> > > > > > >
> > > > > > > <a href="testlink">testlink</a>
> > > > > > >
> > > > > > > becomes a link to:
> > > > > > >
> > > > > > > http://localhost:8080/_ZopeId/30629499A0xKIYXTE4A/testlink
> > > > > > >
> > > > > > > <a href="/testlink">absolute testlink</a>
> > > > > > >
> > > > > > > becomes a link to:
> > > > > > >
> > > > > > > http://localhost:8080/testlink
> > > > > > >
> > > > > > > <a href="http://testlink">absolute testlink with protocol</a>
> > > > > > >
> > > > > > > becomes a link to:
> > > > > > >
> > > > > > > http://testlink
> > > > > > >
> > > > > > > If you see something different, please let me know.
> > > > > > >
> > > > > > > - C
> > > > > > >
> > > > > > >
> > > > > > > On Wed, 2003-04-16 at 08:19, Lubos Culen wrote:
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > I have a page with session data transferring
> through the URLs,
> > > > > > > so the page
> > > > > > > > URLs in browser look like
> > > > > > > >
> > http://www.mysite.com/_ZopeId/84525053A0xJuPCpTSI/mydir/mydocument.
> > > > > > >
> > > > > > > Now, let's have DTML document called "content" inside the
> > > > "mydocument"
> > > > > > > folder, which contains some "static" HTML data (this data
> > > > > > cannot be DTML,
> > > > > > > because it needs to be editable with some WYSIWYG editor).
> > > > Above these
> > > > > > > folders is some ZPT template called index_html, which will
> > > > display the
> > > > > > > content data inside the some template.
> > > > > > > Let's have some link in the "mydocument/content" document,
> > > > which is for
> > > > > > > example <a href="other_document">Link</a> . It is inside the
> > > > > > content area
> > > > > > > and it is linked *relatively*, so I suppose it should maintain
> > > > > > the session
> > > > > > > data (so the Zope's result URL would be
> > > > > > >
> > > > >
> > >
http://www.mysite.com/_ZopeId/84525053A0xJuPCpTSI/mydir/other_document ).
> > > > But the reality is bad - result URL is only
> > > > http://www.mysite.com/mydir/other_document and the session data is
> lost.
> > > >
> > > > So, the question is, is there *any* way how to maintain URL sessions
> > when
> > > > linking relatively inside plain content (non-DTML and non-ZPT)
> document
> > in
> > > > Zope? Or, if not, how people use to solve this problem generally,
when
> > > need
> > > > to transfer non-cookie session data through static <a href="...">
> URLs?
> > > >
> > > > Thanks for the answer,
> > > >
> > > > Lubos.
> > > >
> > > >
> > > > _______________________________________________
> > > > Zope maillist  -  Zope@zope.org
> > > > http://mail.zope.org/mailman/listinfo/zope
> > > > **   No cross posts or HTML encoding!  **
> > > > (Related lists -
> > > >  http://mail.zope.org/mailman/listinfo/zope-announce
> > > >  http://mail.zope.org/mailman/listinfo/zope-dev )
> > >
> >
>