当我想要删除Cookie时,我会尝试
unset($_COOKIE['hello']);
我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?
当我想要删除Cookie时,我会尝试
unset($_COOKIE['hello']);
我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?
当前回答
要删除所有cookie,您可以这样写:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
其他回答
这将在代码中取消设置cookie,但由于$_COOKIE变量在每个请求中都被刷新,因此它只会在下一次页面请求中返回。
要真正摆脱cookie,请将过期日期设置为过去:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
我在代码中遇到了同样的问题,并发现这是一个cookie路径问题。查看这个堆栈溢出的帖子:不能删除php集cookie
我使用路径值“/”设置了cookie,但当我试图清除它时,它没有任何路径值,所以它没有清除。这里有一个有效的例子:
设置cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
清除cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
希望这能有所帮助。
请参阅PHP文档中标记为“示例#2 setcookie() delete Example”的示例。要清除浏览器中的cookie,您需要告诉浏览器该cookie已经过期……然后浏览器将删除它。unset只是从cookie数组中移除'hello' cookie。
我知道这个主题已经创建了很长时间,但我在这个解决方案中发现了一个小错误(我可以这样称呼它,因为它是一个细节)。 我认为更好的解决方案可能是这样的:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
但是,在目前的情况下,您删除了所有unset函数工作的情况下的cookie,并立即创建新的过期cookie,以防unset函数不起作用。
这意味着即使unset函数工作,它仍然会在计算机上有2个cookie。 从逻辑的角度来看,所要求的目标是删除cookie,如果可能的话,如果确实不可能,则使其过期;为了得到“最干净”的结果。
所以,我认为我们最好做的是:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
谢谢,祝您有愉快的一天。
要删除cookie,你只需要将值设置为NULL:
“如果您为cookie设置了过期时间、路径或域的非默认值,则在删除cookie时必须再次提供这些相同的值,以便正确删除cookie。” 引自《学习PHP5》一书。
所以这段代码应该工作(为我工作):
设置cookie: Setcookie ('foo', 'bar', time() + 60 * 5);
删除cookie: setcookie(“foo”,时间()+ 60 * 5);
但是我注意到每个人都将过期日期设置为过期,这有必要吗?为什么?