首页 > 未分类 > 如何解决PHP的session cookie错误

如何解决PHP的session cookie错误

2009年8月22日

废话少说,如果你遇到这个错误,Cannot add header information - headers already sent in……  可参阅此文。

发生原因:

根据错误描述,很显然是由于在http的信息头发送出去后,设置了Cookie,这是不对的。因为Cookie在http发送时会写入到它的信息头部,既然发送出去了,当然就不能再设置Cookie了,所以session_start()调用失败。

但你可能说你在某种环境下却可以正常运行,又是为什么呢?这与你的php.ini设置有关。你可能对你的php.ini做了一下设置:

  1. 你关闭了php的错误或警告报告,即error_reporting (E_ALL ^ E_WARNING);这种情况下其实是有报警的,只是没有显示出来而已。
  2. 你打开了输出缓存的开关,即output_buffering = 1;当设置为true时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中,等所有脚本都解析完成后再发送,所以你可以在此期间随意设置session,就不会出现问题了。

解决办法:

知道了原因,就比较容易解决了。你可以有以下的解决办法:

  1. seesion_start()一定要用在所有html内容输出之前,简单的说,就是要在<html></html>标签之前写上sessiong_start();
  2. 把php.ini的output_buffering设置为true;
  3. 如果无法修改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@悠久博客

未分类

  1. 2009年8月23日12:37 | #1

    最近网站碰到经常错位的问题, 不知道怎么搞.

  2. 2009年8月23日12:41 | #2

    多谢分享。:) 辛苦了.

  3. 2009年9月20日20:15 | #3

    学习了 要勤更新呀 兄弟!

  4. 2009年9月22日09:41 | #4

    不错的技术贴 学习了

  5. 联系Q867400
    2009年11月17日11:41 | #5

    骨头博客营销助手,快速让搜索引擎收录,快速提高网站访问量.

  6. 2010年1月14日11:28 | #6

    很不错的文章 转载了

  7. 2010年1月23日11:27 | #7

    看了不回不礼貌啊

  8. 2010年2月11日14:46 | #8

    路过,学习了,收藏了,谢谢分享!

  9. 2010年7月13日14:07 | #9

    呵呵 没遇到过,楼主说的对,其实遇到问题 关键是找到问题出在哪里,解决起来就好多了

  1. 目前还没有任何 trackbacks 和 pingbacks.