Do you have a question? Post it now! No Registration Necessary. Now with pictures!
- Posted on
August 13, 2007, 9:35 am
rate this thread
I've been programming in php for a long time, and the cookies have
always been a trouble for me.
When I have headers before the cookies set, I get a problem.
Even if I leave space on the first row before I set the cookie, and
there is nothing else,
It says I have headers before.
Is it like that for everyone, or is it just my host?
If so, is there anything that I can do to set cookies anywhere I want?
Re: Cookies problems - why do they need special treatment?
Read up on the HTTP protocol. A response of a server is divided into
headers & body (not to be confused with an HTML head & body). Something
(empty line, followed by body)
As your script produces (non-header) output, the empty line, which
seperates the headers from the body of the response, is sent to the
browser, followed by whatever output you specified further. A cookie has
to be set in the headers (with a Set-Cookie statement), and there's no way
of going back as soon as this empty line has been sent.
If you have to set a cookie somewhere, consider these options:
1. Do almost all processing _before_ generating output. As soon as you get
out of an HTML mindset (and those atrocious files mixing HTML & PHP like
there's no tomorrow) this is actually quite easy.
2. Capture output in a variable, and only echo / print it as soon as you
know no further processing/header() or setcookie() calls are needed.
3. Turn on output buffering (ob_start()) at the start of the script.
(Which will effectively do something like (2) only with somewhat less
The last one is a bit of cheat, and does not promote good code writing. It
is however most simple one. Drawback is that on a slow loading page, it
will take a while to get even a bit of content, while with output
buffering of it can load 'as you go' (depending on how your browser
handles it offcourse). If possible, go for (1).