说这个问题 之前先来看一下手册中对cookie的特性描述
常见缺陷:
1,Cookies 不会在设置它的本页生效,要测试一个 cookie 是否被成功的设定,可以在其到期之前通过另外一个页面来访问其值。过期时间是通过参数 expire 来设置的。可以简单地使用 print_r($_COOKIE); 来调试现有的 cookies。
2,Cookie 必须用和设定时的同样的参数才能删除。如果其值一个空字符串,或者是 FALSE,并且其它的参数都和前一次调用 setcookie 时相同,那么所指定名称的 cookie 将会在远程客户端被删除。
3,由于把 cookie 的值设为 FALSE 会使客户端尝试删除这个 cookie,所以要在 cookie 上保存 TRUE 或 FALSE 时不应该直接使用 boolean 值,而应该用 0 来表示 FALSE,用 1 来表示 TRUE
4,可以把 cookie 的名称设置成一个数组,但是数组 cookie 中的每个元素的值将会被单独保存在用户的系统中。考虑使用 explode() 函数用多个名称和值设定一个 cookie。不推荐将 serialize() 用于此目的,因为它可能会导致一个安全漏洞。
php的cookie和header一样,必须在没有任何输出时到向的客户端。并且在setcookie的页面读取不到设定的cookie,下面这个方式其实是手动的通过给$_COOKIE全局变量符值达到,你在当前页面用$_COOKIE取值时可以取到,但这种值只是手动设置的,并不是从客户端传来的。这点要注意。
通常,php里,这样的一段代码.要浏览器刷一下.才能出现cookie..怎么才能让cookie及时生效呢,分享一个让cookie及时生效的一个方法,很实用的,代码如下:
//PHP COOKIE设置函数立即生效,支持数组
function cookie($var, $value='', $time=0, $path='', $domain=''){
$_COOKIE[$var] = $value;
if(is_array($value)){
foreach($value as $k=>$v){
setcookie($var.'['.$k.']', $v, $time, $path, $domain, $s);
}
}else{
setcookie($var, $value, $time, $path, $domain, $s);
}
}