彻底杜绝PHP的session cookie错误


Posted in PHP onAugust 09, 2009

只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............

看了PHP手册,回答如下:

消息“Warning: Cannot send session cookie - headers already sent。。。”或者“Cannot add header information - headers already sent。。。”。

函数 header(),setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。请参阅“输出控制函数”。

意思是:不要在使用上面的函数前有任何文字,空行,回车,空格等。但。。。问题是,这答案并不令人满意。因为往往程序在其他PHP环境下运行却正常。

首先:这错误是怎么产生的呢?让我们来看看PHP是如何处理HTTP header输出和主体输出的。

PHP脚本开始执行时,它可以同时发送header(标题)信息和主体信息。 Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中。 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题)。但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

好!那我们来解决它:

笨方法:把错误警告全不显示!

掩耳盗铃之计,具体方法就不说了 ^_^#

解决方案:

1)适用于有权限编辑PHP。INI的人

打开php。ini文件(你应试比我清楚你的php。ini在哪里),找到

output_buffering =改为on或者任何数字。如果是IIS6,请一定改为ON,不然你的PHP效率会奇慢。

2)使用虚拟主机,不能编辑PHP。INI,怎么办?

简单:

在你的空间根目录下建立一个。htaccess文件,内容如下:

AllowOverride All

PHP_FLAG output_buffering On

不幸的情况是:还是不行?全部网页都不能显示啦?

那么,你可以打电话骂一通空间商,然后让他给你把apache的。htaccess AllowOverride打开

3)在PHP文件里解决

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返回成一个字符串。允许你处理脚本发出的任何输出。

原理:

output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4。0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

PHP 相关文章推荐
聊天室php&mysql(六)
Oct 09 PHP
smarty实例教程
Nov 19 PHP
php基础学习之变量的使用
Jun 09 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
PHP自动识别当前使用移动终端
May 21 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 PHP
PHP 5.3.0 安装分析心得
Aug 07 #PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 #PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 #PHP
PHP 翻页 实例代码
Aug 07 #PHP
php Sql Server连接失败问题及解决办法
Aug 07 #PHP
php_xmlhttp 乱码问题解决方法
Aug 07 #PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 #PHP
You might like
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
组合算法的PHP解答方法
2012/02/04 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
微信API接口大全
2015/04/15 PHP
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
中专毕业生自我鉴定范文
2013/11/09 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
中介业务员岗位职责
2014/04/09 职场文书
销售人员求职信
2014/07/22 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
调解协议书范本
2016/03/21 职场文书
python爬虫--selenium模块
2021/03/31 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android