彻底杜绝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的5个入手程序
Nov 23 PHP
PHP的中问验证码
Nov 25 PHP
php 执行系统命令的方法
Jul 07 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
PHP面向对象概念
Nov 06 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
深入理解Python异常处理的哲学
2019/02/01 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Django发送邮件功能实例详解
2019/09/02 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python如何实现图片压缩
2020/09/11 Python
python 用struct模块解决黏包问题
2020/11/07 Python
大四毕业生学习总结的自我评价
2013/10/31 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
园艺师求职信
2014/04/27 职场文书
考博专家推荐信
2014/05/10 职场文书
爱护公物演讲稿
2014/09/09 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
2015年推普周活动总结
2015/03/27 职场文书
孔子观后感
2015/06/08 职场文书
纪委立案决定书
2015/06/24 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技