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

Your name:

Reply:


Posted by Rik on 08/13/07 09:49

On Mon, 13 Aug 2007 11:35:59 +0200, ofiras <ofiasu@gmail.com> 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

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация