为什么PHP setcookie()函数在输出后调用也可以设置cookie在远端浏览器?
2017-07-31 18:38
736 查看
在PHP官方手册中有这样一句话:Cookies是http信息头的一部分,因此setcookie()函数必须在向浏览器发送任何输出之前调用.
我们使用setCookie()函数在服务器端发送cookie到远端浏览器,我们可以在http响应报文中看到我们设置的cookie.
但是问题来了,当我们在调用setcookie()之前向浏览器输出数据,我们还是可以看到cookie被成功设置在远端浏览器.这是为什么呢?
因为在PHP配置文件php.ini中有一个选项output_buffering默认是开启的,默认值是4096,http响应的数据会先被写入到php的output_buffering
缓冲区中,当脚本执行结束或者执行了ob_end_flush()函数时 才会输出缓冲区内容并关系缓冲区,cookie会在这时候一并输出到浏览器. 所以不管在什么时候调用setcookie()都是没问题的.
我们可以将output_buffering选项的值改为0,这样就可以关闭PHP缓冲.
我们使用setCookie()函数在服务器端发送cookie到远端浏览器,我们可以在http响应报文中看到我们设置的cookie.
但是问题来了,当我们在调用setcookie()之前向浏览器输出数据,我们还是可以看到cookie被成功设置在远端浏览器.这是为什么呢?
因为在PHP配置文件php.ini中有一个选项output_buffering默认是开启的,默认值是4096,http响应的数据会先被写入到php的output_buffering
缓冲区中,当脚本执行结束或者执行了ob_end_flush()函数时 才会输出缓冲区内容并关系缓冲区,cookie会在这时候一并输出到浏览器. 所以不管在什么时候调用setcookie()都是没问题的.
我们可以将output_buffering选项的值改为0,这样就可以关闭PHP缓冲.
相关文章推荐
- Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
- Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
- 为什么两次调用同一函数, 输入相同, 输出却不同呢? (解决困扰自己好几天的问题, 还是有点激动哈, 奖励自己一顿丰厚的晚餐)
- cookie 为什么设置了过期时间 不起作用 浏览器关闭 cookie 就没了
- PHP setcookie() 函数
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- PHP向浏览器输出内容的4个函数总结
- php 设置cookie函数setcookie详解
- PHP setcookie() 函数
- PHP高级应用学习笔记之——利用header()函数设置浏览器缓存
- 5.定义一个可以接收三个数字的函数,函数体内实现三个数字的排序输出 →(javascript代返回值的函数的申明和调用)
- PHP设置时区函数date_default_timezone_set
- 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常
- php的setcookie函数无法将Cookie写入客户端浏览器
- PHP设置COOKIE保留时间为浏览器进程
- void prinT(Test *pT)//这个函数 这里为什么要用 我完全可以用t3.print()这样来调用类里面函数方法就可以,为何多此一举来这样一步???
- C++中构造函数能调用虚函数吗?(答案是语法可以,输出错误),但Java里居然可以
- php protected只能被继承,不可以在实例中调用,parent::调用父类(子类函数的重载对父类的函数没有影响)
- 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttr
- wininet.dll函数库:不会过期的cookie (同样可以设置WebBrowser的Cookie)