您的目前位置:主页>矩阵界>php>-文章内容页
PHPsetcookie()函数无法创建建立设置读取cookie值失效的解决办法方案
时间:2011-08-16浏览量:
文章归类:

笔者最近在项目开发中遇到一个棘手的麻烦的难解决的PHP不能用自带的setcookie()函数来创建建立cookie的问题,面对这个为客户看+看+呗[kankanbei.com]而进行的php项目开发中遇到这些cookie问题,我们先从一些常见的无法创建cookie的现象去解决:

通常来说,COOKIE无法创建或者设置或者直接失效或读不到cookie值往往有以下几种主要原因:

1.php的cookie是保存于浏览者客户端的,笔者检测了一下浏览器(IE)发现一切设置正常,浏览器并未禁用COOKIE。

2.使用php的setcookie()来创建cookie和php中开启session的 session_start()一样,在setcookie()之前不能有任何HTTP头部输出,比如<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">这种也是不可以的,总之保证<?php setcookie(); ?>在一个PHP文档的最开头。看看呗(kankabbei.com)检查了一下,同样未发现有此类现象。

问题依旧,而且这个PHP COOKIE失效的怪异问题还怪在本地localhost可以读出cookie值,可放在服务器或者虚拟空间就不可以。笔者用ZendStudio打开,大吃一惊,发现在<?php开头竟然有一个小点,而在DreamWeaver或者记事本等编辑器根本见不到该点,如下图:

zenstudiophpcookiecode

将该点在ZendStudio中删除后,一切OK了!看看呗[kankanbei.com]编写的PHP COOKIE的页面编码是UTF8的,以前听说过UTF8格式有看不到的空格回车什么的倒导致PHP执行出问题,没想到这次竟然还有这种事情,建议出现这种情况多在其他编辑器中打开看一下,比如EditPlus、Notepad++、UltraEdit等。

最后总结一些COOKIE在PHP中会出异常问题的其他原因:

1 PHP程序在执行setcookie之前有输出。

   解决 方案: 把setcookie之前的程序检查一下,是否在PHP代码<?php 之前有回车或者空格。 或者: 在程序的最开头执行一次 ob_start()

2 PHP cookie生命太短,还未生效就已死亡

    此项问题的查看可以在PHP程序中执行 time();看看服务器时间与本地时间差是否超过生存时间,例如CSDN曾经有这么一个BLOG:“今天郁闷的很,写了个页面计数器,但cookie设置了在firfox能访问到,在ie下不能访问困惑不解好几天,原来是服务器与本地时间之差大于cookie生存期....但为什么firfox下可以,真不解,看来可能是机制不同!”

 解决办法 :修改服务器时间或增长cookie生命。

3 PHP cookie作用域不对

    先把cookie的作用域设置成 / ,看是否有问题。如果问题解决,再设置成正确的作用域

4 用户禁止使用cookie

      这个不是程序的错了。不过可以使用带参数url传递cookie的值或者session来解决。

上一篇:没有了 下一篇:PHP操作MYSQL数据库需避免保留字以免发生错误
共有 2 条评论,评论不能超过250字,需审核,请遵守相关政策法规。查看所有评论
匿名