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



On Mon, 13 Aug 2007 11:35:59 +0200, ofiras <ofiasu@xxxxxxxxx> 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)
<!DOCTYPE html>
<html>
....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
.



Relevant Pages

  • Re: [PHP] Cookies and sent headers
    ... 99% of the world never calls ob_flush since PHP flushes the buffer automatically at the end of its execution. ... Cookies are actually headers aswell as any headers set via php's headerfunction. ... why does output buffering help here? ...
    (php.general)
  • Re: headers sent issue
    ... The script ... Here I deliberately and explicitly send HTML headers in such a way that I ... why would I program those things in PHP when HTML is made for presenting ...
    (comp.lang.php)
  • Re: How could this possibly happen (HttpURLConnection + simple JSP page)
    ... common practice in PHP development is to put the HTML ... >> back as soon as you start, and more importantly the headers do not ...
    (comp.lang.java.help)
  • RE: [PHP] Cannot send a hyperlink
    ... [PHP] Cannot send a hyperlink ... Why is php refusing to parse as html? ... something like PHPMailer. ... You don't need to add two carriage returns at the end of the headers - ...
    (php.general)
  • Re: PEAR guru, please help with HTML email header
    ... > I am a novice at PHP but so far I've really been enjoying it. ... all the headers, the text version, and then all the HTML ... http://www.gzentools.com -- free online php tools ...
    (alt.php)