php session和cookie无法保存问题详解
某年某月的某一天,心血来潮将代码从公司转移到家用电脑上,从而引发的狂想。
不解如下:
-
同样的代码为什么登陆不进去
-
测试有session为什么第二页就丢失了
-
加盐运算太高,不同电脑响应时间差几秒
概括一句话就是:明明很简单的session为什么罢工了,明明很简单的运算怎么会这么卡。
于是乎,我想到了,难道上天不希望我今天加班,我偷懒之后就不会有这样的问题吧。
然并卵。。。
我需要处理它。
原因分析:
-
分析程序逻辑
-
更换电脑【-=-】
-
更改cookie设置
-
更改session设置
-
更改框架设置
-
chrome查看访问情况
-
chrome查看cookie情况
-
查看自定义日志
-
查看系统日志
-
查看apache日志
-
批量去掉bom头
终于,7,9带我成长带我飞。
解决方案:
日志里有,出现:Warning: Cannot send session cookie – headers already sent…”或者“Cannot add header information – headers already sent…”
只需对php.ini中的output_buffering进行设置,默认值为no,修改为1即可。
其他方案仅供参考:
-
去掉bom头
-
设置php中session属性,如session.cookie_httponly,session.cookie_lifetime,session.gc_maxlifetime,session.use_only_cookies
ps: 默认情况下,php buffer是开启的,而且该buffer默认值是4096,即4kb。你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。
收工。