欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php新手请教一个关于cookie的问题

程序员文章站 2022-04-26 18:22:24
...
代码如下:
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"

相关标签: php cookie