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
实用函数7
Nov 08 PHP
php header Content-Type类型小结
Jul 03 PHP
Apache中php.ini的设置方法
Feb 28 PHP
解析php取整的几种方式
Jun 25 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 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者的疑难问答(1)
2006/10/09 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
PHP输出时间差函数代码
2013/01/28 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php实现微信发红包
2015/12/05 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
python 负数取模运算实例
2020/06/03 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python 实现单例模式的5种方法
2020/09/23 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
安全责任书模板
2014/07/22 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
会计求职自荐信范文
2015/03/04 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
导游词之河北邯郸
2019/09/12 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle