Reply to Re: sessions and redirecting in opera

Your name:

Reply:


Posted by amygdala on 08/13/07 13:20

Jerry Stuckle wrote:
> amygdala wrote:
>> Jerry Stuckle wrote:
>>> amygdala wrote:
>>>> "Jerry Stuckle" <jstucklex@attglobal.net> schreef in bericht
>>>> news:xqKdnb9U2fBnMyLbnZ2dnUVZ_uLinZ2d@comcast.com...
>>>>> amygdala wrote:
>>>>>> Rik wrote:
>>>>>>> On Fri, 10 Aug 2007 20:07:03 +0200, amygdala
>>>>>>> <noreply@noreply.com> wrote:
>>>>>>>> Could it be that Opera needs some kind of body content after a
>>>>>>>> redirection
>>>>>>>> header? Or could it perhaps be that Opera indeed thinks that it
>>>>>>>> should redirect back to the login page again, since it is
>>>>>>>> redirected to a page, that redirected to the login page in the
>>>>>>>> first place. lol
>>>>>>> Possiblity 1:
>>>>>>> Opera -> Tools -> preferences -> Advanced -> Network -> Enable
>>>>>>> Automatic Redirection.
>>>>>>>
>>>>>>> It's enabled by default, but can be disabled for whatever
>>>>>>> purpose. All the more reason why a header redirect should be
>>>>>>> accompanied by some information one is redirected, and a script
>>>>>>> should die()/exit() after that.
>>>>>>> Possibility 2:
>>>>>>> Opera get's the redirect, but still has the page with the same
>>>>>>> URL in cache, so decides to use that one. Set some header and/or
>>>>>>> html information these pages should not be cached.
>>>>>>>
>>>>>>> Possibility 3:
>>>>>>> The script isn't terminated after the first header-redirect,
>>>>>>> continues to run, and effectively changes the redirect by a
>>>>>>> second header() call. Putting an echo directly after it will
>>>>>>> force the headers to be sent, so they cannot be replaced
>>>>>>> anymore, resulting in the first one being the only one, and
>>>>>>> thus the one obeyed by the browser. Another example why one
>>>>>>> should die()/exit() after a redirect. <?php
>>>>>>> //this will offcourse end in /second.html
>>>>>>> header('Location: /first.html');
>>>>>>> header('Location: /second.html');
>>>>>>> <?php
>>>>>>> //this will end in /first.html
>>>>>>> header('Location: /first.html');
>>>>>>> flush();
>>>>>>> header('Location: /second.html');
>>>>>> This thing still has me puzzled. What I did is the following:
>>>>>>
>>>>>> My SessionHandler class has the following method:
>>>>>>
>>>>>> public function redirect( $url )
>>>>>> {
>>>>>> session_write_close();
>>>>>> header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
>>>>>> header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT'
>>>>>> ); header( 'Cache-Control: no-store, no-cache, must-revalidate'
>>>>>> ); header( 'Cache-Control: post-check=0, pre-check=0', false );
>>>>>> header( 'Pragma: no-cache' );
>>>>>> header( 'HTTP/1.0 302 Moved Temporarily' );
>>>>>> header( 'Location: ' . $url );
>>>>>> // this part between the comments is important
>>>>>> echo 'You\'re being redirected to ' . $url . ' .
>>>>>> Click <a href="' . $url. '">here</a> if it doesn\'t work';
>>>>>> // end important part
>>>>>> exit(); // exit doesn't really make a difference for Opera
>>>>>> }
>>>>>>
>>>>>> Since I have now included the exit() statement I am sure that
>>>>>> this is the last thing done by the application when redirecting.
>>>>>> Also,
>>>>>> I have added cache control headers and the likes. But still in
>>>>>> Opera the problem persists if I leave out the echo part you see
>>>>>> above between the comments. So, from my experience it seems as
>>>>>> if Opera wants some body
>>>>>> content for the redirect to work and revalidate the url I landed
>>>>>> on before I had to log in.
>>>>>>
>>>>>> Does anyone have any other clue as to what might be going on
>>>>>> here? Thanks.
>>>>> Why are you sending a message they will never see, anyway?
>>>>> Normally a redirect header has NO text associated with it.
>>>>>
>>>>> If you have your header set up appropriately, they will be
>>>>> redirected. All the message might do is screw things up for the
>>>>> browser.
>>>> PS.: Correct me if I'm wrong, but are my headers not set up
>>>> properly?
>>> Well, I don't see why you have the session_write_close() - the
>>> session will be closed during exit() processing, anyway.
>>>
>>> I also don't see why you have all of the cache control stuff. It's
>>> completely unnecessary in this case.
>>>
>>> Keep it simple - the 302 moved and location should be all you need.
>>
>> I would think so to, but if you have read the entire thread you
>> would see that I am having trouble with getting it to work as
>> expected in Opera. So I thought I'ld use every option at my disposal
>> to make sure the redirect and the session saving works as expected.
>>
>> But now, it looks like the Opera problem only exists when accessing
>> the application local on localhost. (See my reply to Rik)
>>
>>
>
> Yes, I did read the entire thread. That's why I said it. Don't use
> options just because they're there. Use them because there is a need
> for them.

I don't use them because they are there, I use them because every other
option in my mind was exhausted, so I thought I'ld give it a try and one by
one remove a header to see where the problem would arise in Opera. But I
started off putting them all in there for debugging purposes.

session_write_close(): because with Opera I was getting multiple session
entries in my DB. And I know this doesn't make sense logically (I can tell
client processes from server processes) and I know an exit() statement
should suffice, yada yada yada.

Cache-Control and other cache headers: because I thought Opera might somehow
not revalidate the initial redirected url.

But to tell you the truth, I don't see how any cache headers could harm:

header( 'HTTP/1.0 302 Moved Temporarily' );
header( 'Location: ' . $url );

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация