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 5.0对象模型深度探索之绑定
Sep 05 PHP
php实现mysql数据库备份类
Mar 20 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
php面向对象重点知识分享
Sep 27 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
PHP代码加密的方法总结
Mar 13 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
基于empty函数的判断详解
2013/06/17 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
js实现滑动滑块验证登录
2020/07/24 Javascript
python冒泡排序简单实现方法
2015/07/09 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
运动会开幕式主持词
2014/03/28 职场文书
节能环保口号
2014/06/12 职场文书
国庆促销活动总结
2014/08/29 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
告知书格式
2015/07/01 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书