ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法

2015-01-24信息快讯网

这篇文章主要介绍了ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法,需要的朋友可以参考下

近期做一个网站的投票时,遇到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后面跟的那个文件,最后发现第一行是空白的。

thinkphp模板的包含与渲染实例分析
thinkphp模板继承实例简述
thinkphp中空模板与空模块的用法实例
ThinkPHP模板输出display用法分析
ThinkPHP框架设计及扩展详解
PHP魔术方法__GET、__SET使用实例
php中base64_decode与base64_encode加密解密函数实例
php中call_user_func函数使用注意事项
php中base_convert()进制数字转换函数实例
PHP字符串比较函数strcmp()和strcasecmp()使用总结
php中cookie实现二级域名可访问操作的方法
PHP读取CURL模拟登录时生成Cookie文件的方法
php cookie名使用点号(句号)会被转换
php cookie中点号(句号)自动转为下划线问题
PHP会话控制:Session与Cookie详解
ThinkPHP的模版中调用session数据的方法
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
ThinkPHP使用smarty模板引擎的方法
ThinkPHP模板IF标签用法详解
ThinkPHP模板范围判断输出In标签与Range标签用法详解
ThinkPHP模板判断输出Empty标签用法详解
ThinkPHP模板判断输出Present标签用法详解
实现在同一方法中获取当前方法中新赋值的session值解决方法
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
CI框架中libraries,helpers,hooks文件夹详细说明
smarty模板中使用get、post、request、cookies、session变量的方法
php setcookie函数的参数说明及其用法
php使用curl存储cookie的示例
php中cookie的使用方法
php设置session值和cookies的学习示例
©2014-2024 dbsqp.com