PHP会话头已经发出已
问题描述:
我试图访问DOMPDF我的网站的SESSION保护区域内(即转换HTML到PDF的脚本) 。
SESSION包含用户信息,当您单击按钮时,页面将刷新并以PDF格式下载该页面。这在我的笔记本电脑上的开发服务器上正常工作。但它在线说头已经发送。
我打印了下面的标题,并将其追溯到我的SESSION。是否这样,只要你初始化一个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"
}
答
有许多事情可以导致此,但什么是最有可能发生的是,你必须被打印到屏幕上一些空白不知情的情况下之前发送的报头。
从脚本末尾删除任何不必要的close-php标记(?>)。这应该有所帮助(并且是最佳做法)。
答
开始会话不会发送标题,但它会尝试设置需要与标题一起发送的cookie。您可能在已经向浏览器输出内容之后调用session_start()。
答
答案可能在于PHP documentation for session_start():
如果您收到类似的错误:
错误警告:在session_start()[function.session开始]:“无法发送 会话cookie - 头已经(输出开始发...... “
......或者......
” 警告:在session_start(); [function.session启动]:不能发送 会话缓存限制器 - 标头已发送“。
... 确保session_start();简直是在你的 脚本的最顶端,甚至在任何DOCTYPE声明,如:
...
这并不意味着会话头已发送。这意味着输出已经开始(即脚本已经在网页上打印了某些内容),并且服务器必须已经发送标题,所以不能再修改它们。 **错误消息告诉你输出已经开始,在那里开始你的调试。** – JJJ 2012-07-25 15:49:19
你是否在freehoster中托管你的项目?他们有时会发送一些广告,你会得到这样的错误。 – nkr 2012-07-25 15:49:35