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 相关文章推荐
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
php面向对象的方法重载两种版本比较
Sep 08 PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
19个超实用的PHP代码片段
Mar 14 PHP
PHP 导出Excel示例分享
Aug 18 PHP
php字符串截取函数用法分析
Nov 25 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
3种php生成唯一id的方法
Nov 23 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 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正确解析UTF-8字符串技巧应用
2012/11/07 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
python自动发送邮件脚本
2018/06/20 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python面向对象 反射原理解析
2019/08/12 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
幼师专业求职推荐信
2013/11/08 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
安全施工责任书
2014/08/25 职场文书
公民授权委托书范本
2014/09/17 职场文书
委托证明范本
2014/11/25 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
爱的教育观后感
2015/06/17 职场文书
学校食堂管理制度
2015/08/04 职场文书
python基础详解之if循环语句
2021/04/24 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL