彻底杜绝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 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
PHP的FTP学习(三)
Oct 09 PHP
php 中的str_replace 函数总结
Apr 27 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 PHP
php操作csv文件代码实例汇总
Sep 22 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 PHP
Laravel框架源码解析之反射的使用详解
May 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
给导游的表扬信
2014/01/10 职场文书
留学推荐信怎么写
2014/01/25 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
python Polars库的使用简介
2021/04/21 Python
Hive日期格式转换方法总结
2022/06/25 数据库