On Tue, 13 Aug 2002 22:14:28 -0500, you wrote:

>I had some headers that were working on one server (4.0.6), but isn't
>working on my (nearly) fresh install of 4.2.2.  Here's the conundrum:
>    header("Set-Cookie: mid=$mid");
>    header("Location: $location");
>    exit;
>worked just fine.  I moved it over, and now the cookie doesn't take
>effect.  
[...]
>One other feasable difference is that the
>4.0.6 was on a *nix box with apache and the 4.2.2 is on 2k's IIS, but I
>doubt that is the problem.

Actually, that *IS* the problem.  This is a bug in the way that IIS
handles CGI-generated headers, and is detailed in knowledgebase
article Q176113.

It seems that if a "Location: " header is sent from a CGI program, IIS
will ignore any other headers that come with it.  So you cannot by
default set a cookie and redirect on the same page.

The workaround is to rename the script so that it begins with "nph-".
(I'm serious).  This stands for "non-parsed headers mode" and it tells
IIS to leave the headers alone.  Then you have to generate the headers
manually rather than using the setcookie() function built into IIS.

I had this exact same problem on a script that I was working on.  In
my script I was attempting to set a cookie and then redirect the
browser upon successful authentication.  When I discovered that this
does not work with IIS + PHP (cgi mode) I moved the login and logout
functionality to seperate files called nph-authenticate.php and
nph-logout.php, and I generate the headers manually, like so:

header("HTTP/1.0 302 Redirect");
header("Location: $location");
header("Set-Cookie: mid=$mid");

HTH

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to