如何解决PHP的session cookie错误
废话少说,如果你遇到这个错误,Cannot add header information - headers already sent in…… 可参阅此文。
发生原因:
根据错误描述,很显然是由于在http的信息头发送出去后,设置了Cookie,这是不对的。因为Cookie在http发送时会写入到它的信息头部,既然发送出去了,当然就不能再设置Cookie了,所以session_start()调用失败。
但你可能说你在某种环境下却可以正常运行,又是为什么呢?这与你的php.ini设置有关。你可能对你的php.ini做了一下设置:
- 你关闭了php的错误或警告报告,即error_reporting (E_ALL ^ E_WARNING);这种情况下其实是有报警的,只是没有显示出来而已。
- 你打开了输出缓存的开关,即output_buffering = 1;当设置为true时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中,等所有脚本都解析完成后再发送,所以你可以在此期间随意设置session,就不会出现问题了。
解决办法:
知道了原因,就比较容易解决了。你可以有以下的解决办法:
- seesion_start()一定要用在所有html内容输出之前,简单的说,就是要在<html></html>标签之前写上sessiong_start();
- 把php.ini的output_buffering设置为true;
- 如果无法修改php.ini,你可以通过php函数ob_start()来设置是否打开输出缓存开关。与此相关的函数几个函数有:
ob_start():启用output buffering机制。 Output buffering支持多层次 — 例如,可以多次调用 ob_start() 函数。
ob_end_flush():发送output buffer(输出缓冲)并禁用output buffering机制。
ob_end_clean():清除output buffer但不发送,并禁用output buffering。
ob_get_contents():将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。
转载请注明出处:Zigzag@悠久博客

最近网站碰到经常错位的问题, 不知道怎么搞.
多谢分享。:) 辛苦了.
学习了 要勤更新呀 兄弟!
不错的技术贴 学习了
骨头博客营销助手,快速让搜索引擎收录,快速提高网站访问量.
很不错的文章 转载了
看了不回不礼貌啊
路过,学习了,收藏了,谢谢分享!
呵呵 没遇到过,楼主说的对,其实遇到问题 关键是找到问题出在哪里,解决起来就好多了