php新手请教一个关于cookie的问题
function cookie($name) {
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}
/**
* 从客户端浏览器删除一个 Cookie。
* @param string $cookie_name 要删除的 Cookie 名称。
* @return void
*/
function delete_cookie($cookie_name) {
setcookie($cookie_name, '', time() - 2 * 24 * 3600);
unset($_COOKIE[$cookie_name]);
}
delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
为何总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
回复内容:
代码如下:
function cookie($name) {
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}
/**
* 从客户端浏览器删除一个 Cookie。
* @param string $cookie_name 要删除的 Cookie 名称。
* @return void
*/
function delete_cookie($cookie_name) {
setcookie($cookie_name, '', time() - 2 * 24 * 3600);
unset($_COOKIE[$cookie_name]);
}
delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
为何总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
COOKIE 是你从你的客户端带过去的,所以读到COOKIE应该是上次脚本设置的,然而你每次执行这个脚本时, 都把上次设置的COOKIE删了,然后设置了一个新COOKIE,这个COOKIE只能被下次运行的脚本读取到。然后一直进行 删-设-删-设 的循环。。。所以读不到咯。
如果把COOKIE改为SESSION的话,就能读到了,SESSION不会像COOKIE这样慢一拍的。它是保存在服务器的。
因为对于COOKIE的赋值只有等下一次浏览请求时才能生效。但你等到下一次浏览的时候你delete掉了,所以就一直,这个COOKIE和你多大仇..
你在本次请求中已经删除了$_COOKIE['mycookie'],而setcookie需要下一次请求才生效.
$_COOKIE是浏览器把cookie信息传给PHP.
setcookie是PHP把cookie信息告诉浏览器.
也就是$_COOKIE['xxx']的生成需要setcookie('xxx')所在的请求先执行完成.
如果你想输出‘myvalue’,可以将unset($_COOKIE[$cookie_name]);
注释掉。就可以输出了
unset 会立即生效,但是 set_cookie 需要下一次请求才会有效果。
同理,如果删除了 unset 这一句,输出的结果并不是刚刚 set_cookie 的,而是上一次 set_cookie 的。
例如,我把 unset 这一句删除,然后刷新,会显示 string(7) "myvalue"
,没有问题;
接着我把 myvalue 改成 myvalue2,然后刷新,还是显示 string(7) "myvalue"
;
再刷新一次,才会显示 string(8) "myvalue2"
。