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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
php实现的mongodb操作类
May 28 PHP
php并发加锁示例
Oct 17 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
利用PHP获取网站访客的所在地位置
Jan 18 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 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表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
React组件refs的使用详解
2018/02/09 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
vue登录注册实例详解
2019/09/14 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
Python Django 命名空间模式的实现
2019/08/09 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
九年级语文教学反思
2014/02/04 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书