PHP:应该在* any *其他页面内容之前调用setcookie()吗?

时间:2013-12-08 19:08:58

标签: php cookies http-headers setcookie

我正在读取setcookie()函数将HTTP标头添加到任何页面,因此必须在发送任何实际页面内容之前调用它。这对我来说很有意义。

但在那之后,有这个例子:

<?php
if (!isset($_COOKIE['visits'])) { $_COOKIE['visits']=0; }
$visits= $_COOKIE['visits'] +1;
setcookie('visits', $visits, time() + 3600);

include 'welcome.inc.php'

...

我的意思是,如果setcookie()是第一个,那不应该是:

setcookie('visits', $visits, time() + 3600);
$visits= $_COOKIE['visits'] +1;

而不是:

$visits= $_COOKIE['visits'] +1;
setcookie('visits', $visits, time() + 3600);

这是一个非常新手的问题,但不能完全理解在所有事情之前需要调用setcookie()的例子。

2 个答案:

答案 0 :(得分:3)

Cookie(与所有HTTP标头一样)需要在对页面进行任何OUTPUT之前发送,例如在你打印()或echo()任何东西之前,你不允许在你的第一个&lt;?php之前有任何文字。

但是

$visits= $_COOKIE['visits'] +1;

不会向页面添加任何输出,因此使用它是安全的。

答案 1 :(得分:1)

http://php.net/setcookie

该文档说您需要在脚本输出任何内容之前设置cookie。

原因:我会解释它,但是这个链接做得很好。总是确保你在回复之前调用setCookie。

How to fix "Headers already sent" error in PHP