最近修改优化程序员在线工具箱网站的喜欢按钮,发现setcookie无效,导致服务器端一直无法将cookie信息传回浏览器,搞了好久,终于解决了!下面,潘老师说下php的setcookie方法失效问题的解决办法。
原因分析
刚开始网上一般的方法都尝试过,基本无效,在浏览器允许Cookie的情况下,php的setcookie方法无效根本的原因就在于在调用
setcookie
方法之前,就有执行过类似echo
、dump
、var_dump
等方法,cookie
是以HTTP HEADER
请求头的形式传回浏览器,这些方法也会导致头部输出。
而使用php的setcookie
来创建cookie和php中开启session的 session_start
一样,在setcookie
之前不能有任何HTTP头部输出。
潘老师去检查代码,发现如下在调用setcookie
之前require引入了几个php文件,这些文件中正是有这样的输出才导致setcookie
无效。
解决办法
从调用
setcookie
方法之前代码或php文件去找出所有的类似头部输出的方法太麻烦了,最终最简单的解决办法就是在调用setcookie
方法所在的php文件头部调用如下方法即可解决:
ob_start();
ob_start()
函数作用是打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。这就成功解决了php setcookie无效的问题。