2024-02-28 09:00:02

移除一块饼干

当我想要删除Cookie时,我会尝试

unset($_COOKIE['hello']);

我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?


当前回答

这是如何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

其他回答

很简单!

setcookie("cookiename", "cookievalue", 1);

如果您将cookie设置为过去过期时间,浏览器将删除它。参见setcookie() delete example at php.net

大多数人都忘记了这只能在本地机器上工作。 在某个域上,您将需要类似此示例的模式。

setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);

一个干净的删除cookie的方法是清除$_COOKIE值和浏览器cookie文件:

if (isset($_COOKIE['key'])) {
    unset($_COOKIE['key']);
    setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}

你可以简单地使用这个自定义函数:

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');