Re: sessions and redirecting in opera



Jerry Stuckle wrote:
amygdala wrote:
Jerry Stuckle wrote:
amygdala wrote:
"Jerry Stuckle" <jstucklex@xxxxxxxxxxxxx> schreef in bericht
news:xqKdnb9U2fBnMyLbnZ2dnUVZ_uLinZ2d@xxxxxxxxxxxxxx
amygdala wrote:
Rik wrote:
On Fri, 10 Aug 2007 20:07:03 +0200, amygdala
<noreply@xxxxxxxxxxx> 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 );



.



Relevant Pages

  • Re: sessions and redirecting in opera
    ... header('HTTP/1.0 302 Moved Temporarily'); ... exit(); // exit doesn't really make a difference for Opera ... But still in Opera ... redirect to work and revalidate the url I landed on before I had to ...
    (comp.lang.php)
  • Re: sessions and redirecting in opera
    ... Or could it perhaps be that Opera indeed thinks that it ... that redirected to the login page in the ... All the more reason why a header redirect should be accompanied by ...
    (comp.lang.php)
  • Re: sessions and redirecting in opera
    ... header('HTTP/1.0 302 Moved Temporarily'); ... exit(); // exit doesn't really make a difference for Opera ... But still in Opera the problem ... the redirect to work and revalidate the url I landed on before I had to ...
    (comp.lang.php)
  • Re: cant redirect to Excel
    ... I want to do is redirect to Excel in the case of the External user. ... Cannot modify header information - headers already sent by ... I think it is because it has to get the output first from the string ...
    (comp.lang.php)
  • Re: sessions and redirecting in opera
    ... Or could it perhaps be that Opera indeed thinks that it ... All the more reason why a header redirect should be accompanied by ... exit(); // exit doesn't really make a difference for Opera ...
    (comp.lang.php)

Loading