已发送PHP会话标头

时间:2012-07-25 15:46:36

标签: php session

  

可能重复:
  Headers already sent by PHP

我正在尝试访问我网站的SESSION保护区域内的DOMPDF(将HTML转换为PDF的脚本)。

SESSIONs包含用户信息,当您单击按钮时,页面将刷新并以pdf格式下载该页面。这在我的笔记本电脑上的开发服务器上工作正常。但在线它说已经发送了标题。

我打印了下面的标题,并将其追溯到我的会话。是否一旦初始化SESSION标题被发送?

array(3) { 
  [0]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
  [1]=> string(77) "Cache-Control: no-store, no-cache, must-revalidate,post-check=0, pre-check=0" 
  [2]=> string(16) "Pragma: no-cache"
}

4 个答案:

答案 0 :(得分:1)

您必须先启动会话 ,然后向用户发送任何内容。 您可以使用输出缓冲区(ob_*函数,如thisthis)来防止在脚本不应该执行此操作时发送任何内容。

答案 1 :(得分:0)

有许多事情可能会导致这种情况发生,但最有可能发生的事情是,在发送标题之前,您在不知情的情况下会在屏幕上打印一些空格。

从脚本末尾删除任何不必要的close-php标记(?>)。这应该有所帮助(并且是最佳实践)。

答案 2 :(得分:0)

启动会话不会发送标头,但它会尝试设置需要与标头一起发送的cookie。您可能在已经向浏览器输出内容后调用了session_start()。

答案 3 :(得分:0)

答案可能在于PHP documentation for session_start()

  

如果您收到如下错误:

     

错误警告:session_start()[function.session-start]:“无法发送   会话cookie - 已经发送的标题(输出从......开始“

     

...或...

     

“警告:session_start(); [function.session-start]:无法发送   会话缓存限制器 - 已发送标头“。

     

... 确保session_start();实际上是你的最顶层   脚本,甚至在任何DOCTYPE声明之前,例如:

     

...