当我想要删除Cookie时,我会尝试
unset($_COOKIE['hello']);
我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?
当我想要删除Cookie时,我会尝试
unset($_COOKIE['hello']);
我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?
当前回答
如果你想从你当前的所有域中完全删除cookie,那么下面的代码一定会帮助你。
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
这段代码将删除cookie变量完全从所有的域,即;" / " -它表示cookie变量的值为所有域设置,而不仅仅是当前域或路径。Time() - 300表示它设置为以前的时间,因此它将过期。
这就是它被完美删除的方式。
其他回答
我知道这个主题已经创建了很长时间,但我在这个解决方案中发现了一个小错误(我可以这样称呼它,因为它是一个细节)。 我认为更好的解决方案可能是这样的:
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,但由于$_COOKIE变量在每个请求中都被刷新,因此它只会在下一次页面请求中返回。
要真正摆脱cookie,请将过期日期设置为过去:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
你可以简单地使用这个自定义函数:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
如果您想删除$_COOKIE['user_account']。 只使用:
unset_cookie('user_account');
如果您将cookie设置为过去过期时间,浏览器将删除它。参见setcookie() delete example at php.net
这是如何PHP v7 setcookie()代码工作时,你这样做:
<?php
setcookie('user_id','');
setcookie('session','');
?>
从tcpdump在端口80上嗅探时的输出,服务器向客户端(浏览器)发送以下HTTP报头:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
观察以下请求中的数据包,浏览器不再在报头中发送这些cookie