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:Cannotmodifyheaderinformation-headersalreadysentby…
这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释:cookie本身在使用上有一些限制,例如:
1.呼叫setcookie的叙述必须放在标签之前
2.呼叫setcookie之前,不可使用echo
3.直到网页被重新载入後,cookie才会在程序中出现
4.setcookie函数必须在任何资料输出至浏览器前,就先送出
基於上面这些限制,所以执行setcookie()函数时,常会碰到“Undefinedindex”、“Cannotmodifyheaderinformation-headersalreadysentby”…等问题,解决“Cannotmodifyheaderinformation-headersalreadysentby”这个错误的方法是在产生cookie前,先延缓资料输出至浏览器,因此,您可以在程序的最前方加上ob_start()这个函数。这样问题就可以解决了。但是如果要加上ob_start()的话,有不大可行,程序都写完了,才来改这个似乎有点郁闷!发现提示这个错误的时候,我就在想我本地怎么没提示这个问题呢,还以为是PHP.ini配置不一样,想想又不对,都是差不多的。于是看看后面跟的那句“outputstartedat…”意思是在setcookie之前已经在另一处有输出了,于是找到outputstartedat后面跟的那个文件,最后发现第一行是空白的。
相关文章
- input标签checkbox选中触发事件的方法
- 复杂组织中单细胞表观基因组的空间分辨方法
- Ubuntu远程连接MySQL(connection refused)解决方法
- 变量Linux查看Shell变量的简易方法(linux查看shell)
- Oracle中新增数据文件的方法(oracle加数据文件)
- 掌握Linux系统最佳资源管理方法(linux系统资源查看)
- 查看MS SQL当前数据库名称的方法(查看mssql当前库名)
- 指定js可访问其它域名的cookie的方法
- safari,opera嵌入iframe页面cookie读取问题解决方法
- 让python的Cookie.py模块支持冒号做key的方法
- Javascript数组的排序sort()方法和reverse()方法
- JS模板实现方法
- 关于Iframe如何跨域访问Cookie和Session的解决方法
- C#javascript读写Cookie的方法
- jquery删除cookie失效的解决方法
- php利用cookie实现自动登录的方法
- php批量删除cookie的简单实现方法