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源代码
Oct 09 PHP
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
聊天室php&mysql(五)
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
PHP 全角转半角实现代码
May 16 PHP
php动态生成函数示例
Mar 21 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 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的开合式多级菜单程序
2006/10/09 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JS前端笔试题分析
2016/12/19 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
在Django中限制已登录用户的访问的方法
2015/07/23 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python 在局部变量域中执行代码
2020/08/07 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
Linux的文件类型
2012/03/07 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
大学生就业推荐信范文
2013/11/29 职场文书
师生聚会感言
2014/01/26 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
校运会口号
2014/06/18 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS