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



On Aug 13, 12:49 pm, Rik <luiheidsgoe...@xxxxxxxxxxx> wrote:
On Mon, 13 Aug 2007 11:35:59 +0200, ofiras <ofi...@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

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

.



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)
  • PEAR guru, please help with HTML email header
    ... I am a novice at PHP but so far I've really been enjoying it. ... I'm having a problem, however, with some HTML e-mails I'm sending using ... There's a possibility that headers inserted by his ISP's anti-spam ... require_once('PEAR.php'); // These two files are part of Pear, ...
    (alt.php)