Cord Schneider wrote: >Here is an outline of the problem: >1) client browser hits myPage.php >2) myPage.php does a few checks & recognises that this is a first visit >3) myPage.php sets a cookie using setCookie() >4) myPage.php redirects to checkBrow.php which uses JavaScript to do some >basic browser detection >5) checkBrow.php does checks and looks for cookie written by myPage.php >6) checkBrow.php fails to find the cookie because header( "Location: >http://someaddress" ) in step (4) has trashed the header containing the >cookie information!! Note that ob_start() has to be used to prevent any data >being sent to the client before the header has been set.. i.e. the page is >being cached server-side. >
This is a common problem people experience. When you use a "Location" header in this way, you not only add a simple HTTP header to the response, you also change the status code. The basic answer is, you cannot successfuly generate a "Set-Cookie" header and a "Location" header on the same page. This is a characteristic of the HTTP protocol, so you will find this in ColdFusion (cflocation) and other server-side scripting languages as well. >myPage.php was originally written in ASP and worked fine. ASP seems to write >the cookie back to the client browser first, and *then* performs a redirect. > If you don't mind, I'm interested in learning more about what exactly ASP does differently. Are there two HTTP responses sent? >kludged a fix by setting the cookie and then writing a page that uses a ><META> refresh to redirect... > >Is there a more elegant way of doing this?? > That's the workaround most people end up with, and yes, it sucks. The best you can do for an elegant "solution" is to make your page completely white with a 0 second wait on the refresh, and it will be difficult to notice. Of course, those whose browsers don't automatically redirect will be staring at a blank screen. The "real" solution is usually to learn about all the limitations of the Web environment and try to design your solution around them. By your intelligent questions, I can tell you have a good grasp of what's going on, so I'll bet you can think of a slightly modified design that will work better for you. Happy hacking. Chris -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php