【问题标题】:PHP: Should setcookie() be called before *any* other page content?PHP:是否应该在 *任何* 其他页面内容之前调用 setcookie()?
【发布时间】:2013-12-25 19:08:55
【问题描述】:

我读到 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() 相关的示例。

【问题讨论】:

    标签: php cookies http-headers setcookie


    【解决方案1】:

    Cookies(像所有 HTTP 标头一样)需要在页面的任何 OUTPUT 生成之前发送,例如在你 print() 或 echo() 任何东西之前,你不能在你的第一个 前面有任何文本

    但是

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

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

    【讨论】:

    • 而且由于$visits实际上是在setcookie()调用中使用的,所以它必须在之前。
    【解决方案2】:

    http://php.net/setcookie

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

    原因:我会解释的,但是这个链接做得很完美。请务必确保在回显之前调用 setCookie。

    How to fix "Headers already sent" error in PHP

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多