Cookies problems - why do they need special treatment?

Cookies problems - why do they need special treatment?

am 13.08.2007 11:35:59 von ofiras

Hii everyone,
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?
Please help,
Ofir.

Re: Cookies problems - why do they need special treatment?

am 13.08.2007 11:49:55 von luiheidsgoeroe

On Mon, 13 Aug 2007 11:35:59 +0200, ofiras wrote:

> Hii everyone,
> 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?


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
like this:

(header)
200 OK
Content-length: xxx
(...more headers)

(empty line, followed by body)


....etc

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
control).

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).
--
Rik Wasmus

Re: Cookies problems - why do they need special treatment?

am 13.08.2007 14:03:38 von ofiras

On Aug 13, 12:49 pm, Rik wrote:
> On Mon, 13 Aug 2007 11:35:59 +0200, ofiras wrote:
> > Hii everyone,
> > 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?
>
> 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
> like this:
>
> (header)
> 200 OK
> Content-length: xxx
> (...more headers)
>
> (empty line, followed by body)
>
>
> ...etc
>
> 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
> control).
>
> 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).
> --
> Rik Wasmus

Thanks a lot, ill think ill go for the second one... ill see what best
for me.
Thanks,
Ofir.