当前位置: 首页 > 编程笔记 >

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

越飞鸾
2023-03-14
本文向大家介绍ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法,包括了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中session和cookie无效的解决方法,包括了thinkphp中session和cookie无效的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkphp中session和cookie无效的解决方法。分享给大家供大家参考。具体分析如下: 问题描述: 在本地调试时session和cookie是用没有问题的,我是用session保存当前登录账

  • 本文向大家介绍解决Laravel无法使用COOKIE和SESSION的问题,包括了解决Laravel无法使用COOKIE和SESSION的问题的使用技巧和注意事项,需要的朋友参考一下 COOKIE和SESSION的具体使用百度和官方文档上都有。 但是,文档里没有说明必须经过相应的中间件才能使用,百度搜索结果都是彼此copy的bullshit!!! 方法如图所示,对应的路由必须使用下列中间件,COO

  • 本文向大家介绍详解PHP中cookie和session的区别及cookie和session用法小结,包括了详解PHP中cookie和session的区别及cookie和session用法小结的使用技巧和注意事项,需要的朋友参考一下 具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期

  • session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在浏览需要认证的服务页面以及页面统计中却相当关键。我们先来了解一下session和cookie怎么来的?考虑这样一个问题: 如何抓取一个访问受限的网页?如新浪微博好友的主页,个人微博页面等。 显然,通过浏览器,我们可以手动输入用户名和密码来访问页面,而所谓的“抓取”,其实就是使用程序来模拟完成同样的工作,

  • 框架中session/cookie的使用 session session的作用主要在保存会话信息,在访问者浏览网站的期间,对访问者相关的信息进行记录,当浏览器关闭后,会话结束,session数据也就消失了。 PHP框架中session是一个数组,可以通过$_SESSION['key'] = $value的方式对session赋值。如: $_SESSION['myname'] = 'Helllo';

  • 本文向大家介绍php及codeigniter使用session-cookie的方法(详解),包括了php及codeigniter使用session-cookie的方法(详解)的使用技巧和注意事项,需要的朋友参考一下 1、读写cookie <1>原生 设置失败,没有正常写入浏览器,测试失败,原因未知 <2>CI框架 <3>通过helper 2、读写session <1>原生session 启动: 赋