彻底杜绝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 高手之路(一)
Oct 09 PHP
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
PHP实现邮件群发的源码
Jun 18 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
深入解析PHP底层机制及相关原理
Dec 11 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
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
php 如何获取数组第一个值
2013/08/06 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
详解Python字典的操作
2019/03/04 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python截图并保存的具体实例
2021/01/14 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
英语专业职业生涯规划范文
2014/03/05 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
关于安全的广播稿
2014/10/23 职场文书
检举信的写法
2019/04/10 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
Django框架之路由用法
2022/06/10 Python