ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法


Posted in PHP onJuly 01, 2014

近期做一个网站的投票时,遇到ThinkPHP中的cookie和session冲突导致Cookie不能使用的情况。

该网站采用的是ThinkPHP框架制作,有一页面上面展示很多图片,要求每个图片下面有对应的投票,通过限制ip地址来,限制游客在一定时间范围内,能对多个图片投票,但是每个图片只能投票一次,开始使用ip存储在数据库解决,后来改进为使用session存储,ip在服务文件里,不过要把生成的sessionid存储在本地的cookie中,按照ThinkPHP手册说明操作session一切顺利,但是在生成cookie之后,却在本地电脑中找不到cookie文本,原本以为是本地电脑限制cookie的生成,可是查看和测试的结果是没有限制,于是自己又单独建立了一个php文件,测试生成cookie,没问题,在本地找到了cookie文本,于是在网上查找到如下内容。顺序解决了问题,使用setcookie()函数设置cookie,得到了想要的结果。

解决办法如下:

找到php.ini 这个配置文件,然后查找一项:output_buffering将其值由原来的off改为on,重新启动Apache就ok了。

另外还有很多相似的问题:

有些时候会发现原在本地运行没有问题的文件,在服务器上测试时,竟然提示本地没有出现的错误: Warning: Cannot modify header information - headers already sent by…

这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释: cookie本身在使用上有一些限制,例如:

1.呼叫setcookie的叙述必须放在标签之前

2.呼叫setcookie之前,不可使用echo

3.直到网页被重新载入後,cookie才会在程序中出现

4.setcookie函数必须在任何资料输出至浏览器前,就先送出

基於上面这些限制,所以执行setcookie()函数时,常会碰到“Undefined index”、“Cannot modify header information - headers already sent by”…等问题,解决“Cannot modify header information - headers already sent by”这个错误的方法是在产生cookie前,先延缓资料输出至浏览器,因此,您可以在程序的最前方加上ob_start()这个函数。这样问题就可以解决了。 但是如果要加上ob_start()的话,有不大可行,程序都写完了,才来改这个似乎有点郁闷!发现提示这个错误的时候,我就在想我本地怎么没提示这个问题呢,还以为是PHP.ini配置不一样,想想又不对,都是差不多的。于是看看后面跟的那句“output started at…”意思是在setcookie之前已经在另一处有输出了,于是找到output started at后面跟的那个文件,最后发现第一行是空白的。

PHP 相关文章推荐
php daodb插入、更新与删除数据
Mar 19 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
国外PHP程序员的13个好习惯小结
Feb 20 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
PHP 错误处理机制
Jul 06 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
yii2实现根据时间搜索的方法
May 25 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 #PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 #PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 #PHP
PHP远程采集图片详细教程
Jul 01 #PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 #PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 #PHP
PHP生成二维码的两个方法和实例
Jul 01 #PHP
You might like
PHP保存session到memcache服务器的方法
2016/01/19 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
详解python进行mp3格式判断
2016/12/23 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
傲盾软件面试题
2015/08/17 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
商务助理岗位职责
2013/11/13 职场文书
在校实习生求职信
2014/06/18 职场文书
暑期培训班策划方案
2014/08/26 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
使用Pytorch训练two-head网络的操作
2021/05/28 Python
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
Mysql数据库group by原理详解
2022/07/07 MySQL