thinkphp的cookie和session ThinkPHP中Cookie不能使用

近日做一个网站的投票时,遇到的问题

声明使用的是thinkphp框架做的网站,有一页面上面展示很多图片,要求每个图片下面有对应的投票,通过限制ip地址来,限制游客在一定时间范围内,能对多个图片投票,但是每个图片只能投票一次,开始使用ip存储在数据库解决,后来改进为使用session存储,ip在服务文件里,不过要把生成的sessionid存储在本地的cookie中,按照thinkphp手册说明操作session一切ok,可是生成cookie之后,死活在本地电脑中找不到cookie文本,还以为是本地电脑现在cookie的生成,可是查看和测试的结果是没有限制,于是自己又单独建立了一个php文件,测试生成cookie,没问题,在本地找到了cookie文本,于是在网上查找到如下内容。顺序解决了问题,使用setcookie()函数设置cookie,得到了想要的结果

解决ThinkPHP中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后面跟的那个文件,看到第一行是空白的,然后才是

发表评论

电子邮件地址不会被公开。 必填项已用*标注