From: Geoff T. <gta...@na...> - 2001-08-28 15:51:11
|
At 10:52 AM 8/28/01 -0400, David Casti wrote: >Turns out I declared victory too soon... the full URL redirect worked, but >only because I still had self.session().delValue('message') commented >out. When I uncommented that instruction, I returned to my non-working >behavior. > >I've done some additional research, and I don't think this is a >cookies-don't-get-set-on-redirect problem... I think this has everything >to do with the self.session().delValue('message') that occurs later in my >PSP code. > >Try this -- > >page1.psp: ><% >self.session().value('message', "hello") >res.sendRedirect("page2.psp") >%> > >page2.psp: ><% >res.write(self.session().values()) >%> > >then point your browser at page1.psp. You will get redirected to >page2.psp and the dictionary {message: "hello"} will display... which >shouldn't happen if cookies aren't getting set before the redirect. > >Now, change page1.psp to: ><% >self.session().value('message', "hello") >res.sendRedirect("page2.psp") >self.session().delValue('message') >%> > >then point your browser at page1.psp. You will get redirected to >page2.psp but no dictionary will display. > >It seems that the code is executing in this order -- > >self.session().value('message', "hello") >self.session().delValue('message') >res.sendRedirect("page2.psp") > >-- which is unexpected. The code appears in the Cache/PSP file correctly... > >I have worked-around this problem for now by introducing a >self.session().value('loginmessage') and only index.htm ever calls >self.session().delValue('loginmessage')... but the behavior is still a mystery. > >Thanks, >David. What's happening is that sendRedirect doesn't immediately do the redirect. Instead it just sets the correct headers in your response so that when the browser receives the response, it will redirect to the page you specify. But the entire page1.psp will be processed before any part of page2.psp gets processed. This isn't a flaw of any kind in WebKit, it's just generally how redirects work. So instead, you need to have logic more like: page1.psp: <% self.session().setValue('message', 'hello') res.sendRedirect('page2') %> page2.psp: <% if self.session().hasValue('message'): res.write('message is: ' + self.session().value('message')) self.session().delValue('message') %> -- - Geoff Talvola gtalvola@NameConnector.com |