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 相关文章推荐
我的群发邮件程序
Oct 09 PHP
解决GD中文乱码问题
Feb 14 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
降低PHP Redis内存占用
Mar 23 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
php远程请求CURL案例(爬虫、保存登录状态)
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若干单维数组遍历方法的比较
2011/09/20 PHP
PHP中的session安全吗?
2016/01/22 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
Python脚本实现格式化css文件
2015/04/08 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python request 模块详细介绍
2020/11/10 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
优秀医生事迹材料
2014/02/12 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript