ThinkPHP的cookie和session冲突造成Cookie不能使用的解
在打造基于ThinkPHP框架的网站时,我们曾遇到一个棘手的难题:cookie与session的冲突导致Cookie无法正常使用。这个问题出现在一个展示众多图片的网页上,每个图片都需要进行投票功能,且每个IP地址在一定时间范围内只能对单个图片投票一次。最初,我们尝试通过数据库存储IP地址来解决这一问题,但随后我们转向使用session存储IP信息,并将生成的sessionid存储在本地cookie中。按照ThinkPHP手册的指导,session的使用一切顺利。当我们在本地生成cookie后,却找不到cookie文本。
这个问题一度让我们困惑,因为我们确信本地环境并未限制cookie的生成。为了测试,我们单独创建了一个PHP文件来生成cookie,这次成功了,我们能够在本地找到cookie文本。通过调查,我们找到了解决方案。我们需要将phpi配置文件中的output_buffering参数从off改为on,并重新启动Apache服务器。这个改变解决了问题。
有时我们会发现本地运行无问题的文件在服务器上测试时会出现奇怪的错误提示,如“Cannot modify header information - headers already sent by”。这种问题通常与cookie的使用有关。根据网上的一些解释,使用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”这个错误的一个方法是先延缓资料输出至浏览器,可以在程序的最前方加上ob_start()这个函数。但如果要在已经完成的程序中添加ob_start(),可能会有些麻烦。在遇到这个错误提示时,我曾误以为是因为PHPi配置不同导致的。但实际上,关键是找到setcookie之前已经输出的内容。有一次,我看到错误提示中提到了“output started at”,并跟随了一个文件名,打开这个文件发现第一行是空白。这就是问题的关键所在。删除或修改这些内容,就可以成功使用cookie了。
希望以上内容能帮助遇到类似问题的朋友们找到解决方案。
编程语言
- ThinkPHP的cookie和session冲突造成Cookie不能使用的解
- JS比较两个数值的大小实例
- JQuery实现列表中复选框全选反选功能封装(推荐
- php打乱数组二维数组多维数组的简单实例
- JavaScript继承与多继承实例分析
- AngularJs返回前一页面时刷新一次前面页面的方法
- 详解git commit --amend 用法
- 网站性能提高实战经验点滴记录
- log4net配置和使用方法分享
- Node.js的特点详解
- 用jQuery将JavaScript对象转换为querystring查询字符串
- php实现无限级分类
- PHP使用pdo实现事务处理操作示例
- Vue2.0 v-for filter列表过滤功能的实现
- PHP工厂模式、单例模式与注册树模式实例详解
- jQuery实现的给图片点赞+1动画效果(附在线演示及