PHP的setcookie函数,手册里是这么写的:

setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including and

tags as well as any whitespace.

大致意思是在setcookie之前不能有东西输出到客户端浏览器,否则会报错。但是经测试发现,并没有报错。继续翻看手册:

You can use output buffering to send output prior to the call of this function, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.

于是我修改了php.ini(PHP版本5.4)的output_buffering为0,即关闭缓冲区。(PHP5.3版本以下是关闭的,5.3之后是默认开启,值为4096)

意思是如果在输出cookie之前,设置了ob_start和ob_end_flush来输出缓冲区,则不会报错。那么,为什么cookie和缓冲区的数据一起返回就没有报错呢?应该是因为:缓冲区的数据将整理成一个完整的HTTP包发出去。

我们可以看一下报错信息:

echo "i am going to setcookie";

var_dump(setcookie('buhehe', 'asdasdasdasdad'));

print_r($_COOKIE);

“请不要修改header信息,因为header已经发送过了。”很明显,没有使用缓冲区输出,则header先一步返回到浏览器了,然后再进行setcookie发送header头信息的时候,就报错啦——不符合HTTP协议的规范。因为HTTP协议规定header应该在body之前输出。

我把代码修改了一下,把将输出的echo的数据和header头的cookie一起发出去。

ob_start();

echo "i am going to setcookie";

var_dump(setcookie('buhehe', 'asdasdasdasdad'));

ob_end_flush();

print_r($_COOKIE);

结果如下:

当你设置output_buffering为0也就是在php.ini关闭缓冲区的时候,就需要手动ob_start来开启缓冲区了。

为什么有些开发者测试的时候,发现setcookie之前echo了信息也没有报错呢?

因为当前大部分的PHP应用都是5.3+ 的,有些甚至用上了7。PHP5.3+版本中,因为默认开启了缓冲区,并且默认size为4096,所以在setcookie之前echo的数据,以及cookie的header头信息,都会在缓冲区被封装成HTTP包,发给客户端啦~所以也就不会产生上图中的报错信息(请勿修改HTTP的header头信息)啦~~

php7 setcookie无效_PHP setcookie()之前不能有任何输出相关推荐

  1. php7 setcookie无效_PHP setcookie() 函数 | 菜鸟教程

    PHP setcookie() 函数 完整的 PHP HTTP 参考手册 定义和用法 setcookie() 函数向客户端发送一个 HTTP cookie. cookie 是由服务器发送到浏览器的变量 ...

  2. php7 setcookie无效_php COOKIE介绍和setcookie有时会在ie下失效问题

    建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的信息,在PHP中提供了两种方便的手段:session和cookie功能.为了永久的保持用户信息,则cookie是最便捷的手段.在这里我将为大 ...

  3. php setcookie 出错,PHP setcookie无效的原因分析

    PHP setcookie无效的原因分析 在PHP开发中,有时候你在本地开发测试过程中是正常的,但是上传到服务器环境时候便运行不正常了,最近遇到了这样一个问题,本地PHP开发环境中setcookie正 ...

  4. setcookie无效

    session_start(); setcookie("a","value"); print $_COOKIE['a']; 如果没有开头的session_sta ...

  5. Beego2 使用Session时SetCookie无效

    Beego2已经发布有一段时间了,之前项目都是使用JWT做会话管理,一直没用Session,本次发文记录一下使用的坑. 如何安装Beego go get github.com/beego/beego/ ...

  6. php输出setcookie,PHP函数:setcookie()

    送出 Cookie 信息到浏览器. 语法: int setcookie(string name, string value, int expire, string path, string domai ...

  7. php setcookie机制,php setcookie详解用法

    cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 php教程,您能够创建并取回 cookie 的值. ...

  8. php中setcookie参数,php setcookie函数的参数说明及其用法

    php setcookie函数的参数说明及其用法 php setcookie函数的参数说明 用法: setcookie(name,value,expire,path,domain,secure) 参数 ...

  9. php setcookie 参数1,setcookie各个参数详解__Vue.js

    setcookie各个参数详解 定义和用法 setcookie() 函数向客户端发送一个 HTTP cookie. cookie 是由服务器发送到浏览器的变量.cookie 通常是服务器嵌入到用户计算 ...

最新文章

  1. POJ3040给奶牛发工资
  2. 03-缓存一致性---提高性能和引入CoreLink CCI-500
  3. /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc(转载)
  4. 关于nunit调试VS2010中的4.0程序集的问题
  5. 6 PP配置-生产主数据-工作中心相关-工作中心标准值参数
  6. zabbix监控mysql死锁
  7. torch.stack作用分析
  8. python卷积函数_python – 理解Scipy卷积
  9. Asp学习者完整攻略之三:操作SQL:SQL基础:
  10. java rome_Rome使用入门
  11. java四大模块_Spring框架七大模块
  12. [置顶] Android改变图像的饱和度、亮度和对比度
  13. 一分钟教你在博客园中制作自己的动态云球形标签页
  14. xcode mysql库_Mac+MySQL+Xcode数据库配置
  15. 【软件】3DsMax2009 下载百度云盘下载(附教程)
  16. 解读《关于促进大数据发展的行动纲要》
  17. nifi集群_NiFi安装(单机+集群)
  18. ubuntuv20启动界面美化_聊一聊我的win10系统美化/使用习惯
  19. cisco 模拟器安装及交换机的基本配置实验心得_软考网络工程师级配置题总结 | 交换机配置、路由器配置、广域网接入配置、L2TP配置、IPSec配置、PIX防火墙配置...
  20. 09Apache POI学习笔记

热门文章

  1. android下载歌词代码,比较完整的android MP3 LRC歌词滚动高亮显示(附源码)
  2. 搜狗笔试题~求圆上的点最多可以组成多少个钝角三角形
  3. arcgis创建公里格网并计算格网内点的平均值最后形成马赛克式栅格图
  4. 操作系统—进程控制实验
  5. IT命名学(蔡学镛)
  6. android拍照软件推荐,估计你都没用过!安卓及iOS平台7款最佳拍照APP
  7. 机械设计推荐的笔记本
  8. h264转mp4 linux,mp4格式的视频,编码方式mpeg4,转化为h264
  9. 微商卖零食如何通过微博引流?成功开启新的销售渠道
  10. “工科生”的浪漫 百度大脑语言与知识技术峰会在七夕向你发出参会邀请