为什么必须在HTTP响应的开头调用SetCookie?

Tar*_*run 1 php cookies buffer

在阅读有关cookie的过程中,我发现很难掌握以下语句
" setcookie()必须在HTTP响应的任何输出之前调用.主要原因是PHP没有缓冲HTTP响应"请帮助我以简单的方式解释它

Wal*_*ndt 5

要理解该陈述,您需要了解以下几点:

  1. HTTP响应由两部分组成,一组"标题"(键值对),然后是"主体",它是实际数据,例如网页或图像.
  2. 必须首先发送HTTP头,并且即使已发送"body"的一个字节,客户端也不再处理头.
  3. 除其他外,Cookie以HTTP标头的形式发送给客户端.

所以它的含义是:除非你做一些特殊的事情,当你"回应"某个东西或者在一个<?...?>块之外有任何数据时,PHP将开始使用该数据的响应体.在此之后,不能再发送包含cookie设置标头的标头.

  • 是的,如果启用输出缓冲,则告诉PHP保持输出,直到您准备好对其执行某些操作为止.在PHP手册中查找ob_start和ob_end_flush调用.基本上,您可以提前调用ob_start,并在准备好PHP将数据发送到客户端时调用ob_end_flush. (2认同)