彻底杜绝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
WordPress判断用户是否登录的代码
Mar 17 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
基于xcache的配置与使用详解
Jun 18 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
教你如何使用php session
Oct 28 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
PHP实现的简单日历类
Nov 29 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 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可变函数学习小结
2015/11/29 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
永不消失的title提示代码
2007/02/15 Javascript
学习YUI.Ext 第二天
2007/03/10 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
vue3.0实现插件封装
2020/12/14 Vue.js
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
培训心得体会
2013/12/29 职场文书
四年级语文教学反思
2014/02/05 职场文书
优秀家长事迹材料
2014/05/17 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
创优争先心得体会
2014/09/11 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
在redisCluster中模糊获取key方式
2021/07/09 Redis