时时商务社区

标题: ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法 [打印本页]

作者: wx_pylelnL4    时间: 2018-2-14 05:56

            近期做一个网站的投票时,遇到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的模版中调用session数据的方法
  • ThinkPHP框架实现session跨域问题的解决方法
  • ThinkPHP关于session的操作方法汇总
  • ThinkPHP实现将SESSION存入MYSQL的方法
  • 如何让thinkphp在模型中自动完成session赋值小教程
  • thinkphp在模型中自动完成session赋值示例代码
  • ThinkPHP中Session用法详解
  • thinkphp中session和cookie无效的解决方法
  • ThinkPHP自定义Redis处理SESSION的实现方法
  • thinkphp3.x中session方法的用法分析
  • thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
  • ThinkPHP中session函数详解
  • thinkPHP中session()方法用法详解
            




    欢迎光临 时时商务社区 (http://bbs.4435.cn/) Powered by Discuz! X3.2