PHP中Header位置错误导致SESSION丢失

近日忙于一项PHP项目,忙的焦头烂额。昨天晚上加班到12点将模板解析部分进行了修改优化,今天早晨开始测试,结果发现通过SESSION验证的所有功能都不能使用了。于是打开Firefox,使用firebug中的cookie插件查看,结果发现,session ID统统不见了,COOKIE里面更是一干二净,心中大惊。

仔细排查下来,代码并无不妥。开始以为$GLOBALS和session冲突,但是经过试验发现二者没有影响。后来发现一个奇怪的问题,凡是有HTML代码块的地方,SESSION都会丢失。于是注释掉语句逐一排查。最后注释到header(“content-type:text/html; charset=utf-8”);的时候,SESSION不再丢失。于是怀疑是header语句失败才使Set-Cookie失败。于是将此语句前加一@ 屏蔽一切错误,但不见效果。于是怀疑Header语句位置不对,将其改到session_start()后,问题消失。

开始以为是header语句出错导致的,后来发现,header语句在session_start()前就会引起错误,在修改代码时我移动了header的位置,但并未注意!终于找到病因了,分享下给有同样问题的朋友。

2012-3-17 发现了另外一种可能引起Session丢失的原因,请参考《PHP由于服务器时间不正确导致的IE、Chrome下SESSION丢失

PHP中Header位置错误导致SESSION丢失》上有4条评论

  1. Pingback引用通告: PHP由于服务器时间不正确导致的IE、Chrome下SESSION丢失 – Starlight36's Blog

评论已关闭。