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 相关文章推荐
一个odbc连mssql分页的类
Oct 09 PHP
在PWS上安装PHP4.0正式版
Oct 09 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
深入PHP magic quotes的详解
Jun 17 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 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实现用户认证及管理完全源码
2007/03/11 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
python制作简单五子棋游戏
2019/06/18 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
学生请假条格式
2014/04/11 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
培训通知
2015/04/17 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
使用javascript解析二维码的三种方式
2021/11/11 Javascript
SpringBoot详解执行过程
2022/07/15 Java/Android