35

我已经尝试在 php 手册和互联网上搜索如何删除 cookie,并且我尝试过的方式与他们所说的完全相同:

setcookie("name", '', 1);

或者

setcookie("name", '', time()-3600);

但是当我在 Firefox 的 cookie 对话框中检查 cookie 时,它​​仍然具有相同的值。我使用以下行设置此 cookie:

setcookie("name", $value, time() + 259200, $path);

我在 stackoverflow: 上找到了这个问题,但没有一个答案解决了这个问题。正如作者所说,我也尝试将所有参数放入,但没有效果。

有没有人看到问题?

4

18 回答 18

71

手册指出

必须使用与设置相同的参数来删除 Cookie。如果 value 参数是一个空字符串,或者FALSE,并且所有其他参数与之前对 setcookie 的调用匹配,那么具有指定名称的 cookie 将从远程客户端中删除。这是通过将值设置为“已删除”并将到期时间设置为过去一年来在内部实现的。

因此,还要确保$path正确指定 -在删除它时也是如此。例如,如果 cookie 是在子目录中指定的,您可能无法从父目录或子目录(或两者)中删除它。

我不完全确定权限是如何工作的,但您可能想使用 Web Developer Toolbar 查看您尝试删除的 cookie的路径。

于 2010-05-18T10:48:58.300 回答
14

我很惊讶没有人提到它(或者我可能错过了),但域名也很重要!如果您在 sub-domain.example.com 上,并且 cookie 来自 .example.com,那么您需要显式设置 domain 参数,否则它将假定当前域并且不起作用。

setcookie('cookiename', FALSE, -1, '/', '.example.com');

子域值不会清除父域中的 cookie。

于 2016-11-21T17:06:03.393 回答
13

好的,我真的不明白,但它现在有效。神奇的代码是:

setcookie("name", '', 1, $path);

我不是已经试过了吗??!无论如何,它现在有效。感谢您的帮助,人们!

于 2010-05-20T11:47:40.873 回答
6

如果您删除特定路径的 cookie,并且您的路径参数以斜杠“/”结尾,那么它将在 Firefox 和 IE 中有效,但在 Chrome 和 Opera 中无效。如果没有尾部斜线,那么它只能在 Chrome 和 Opera 中使用。

所以你应该同时使用:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE
于 2016-01-22T10:34:32.443 回答
2

我尝试使用

setcookie("name", "", -1);

在我的 Apache/PHP5 服务器上,它清除了 cookie(至少 var_dump($_COOKIE) 显示了一个空数组)。

于 2010-05-18T10:39:05.943 回答
2

您是否检查过您的脚本是否已经发送了它的 HTTP 标头?

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}
于 2010-05-18T10:41:47.493 回答
2

这对我有用:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);
于 2016-10-31T00:45:04.520 回答
0

您是否尝试过将时间设置为较小的值并使用 cookie 的值?

setcookie("name", 'n', 1);
于 2010-05-18T10:36:41.737 回答
0

不过,我也会发生十分之一的情况。我想这是我们编码方式的问题。

这是我的代码

setcookie("token", "", time() - 36000, "/");
于 2010-05-18T10:43:12.510 回答
0

我建议使用

ob_start();

一开始我

于 2012-11-16T07:13:19.293 回答
0

我有一个类似的问题。

我发现,无论出于何种原因,从 logout.php 中回显某些内容使其实际上删除了 cookie:

echo '{}';
setcookie('username', '', time()-3600, '/');
于 2013-05-28T20:06:06.813 回答
0

有时,您将 cookie 保存在与尝试删除/使用它不同的路径中。

进入例如。Chrome cookie 设置并检查 cookie 路径,然后将路径添加到 setcookie 命令中,然后像这样删除它:

setcookie( "my_cookie_name","",1,'/mypath');

尝试删除或取消设置保存在错误路径中的 cookie 是行不通的,而且会非常令人沮丧。

于 2015-05-09T15:55:57.957 回答
0

只需在 global.php 等全局核心函数文件中定义一个自定义函数

function delete_cookie()
{
unset($_COOKIE['cookiename']);
setcookie('cookiename',NULL,time()-3600, '/');
return true;
}

并在 html 代码的顶部使用此功能,例如

include('global.php')
if(isset($_GET['delete_cookie']))
{
delete_cookie(); //if you want to pass the parameters into the function also possible like delete_cookie(param1);
}
于 2015-10-21T05:46:08.717 回答
0

设置一个cookie

setcookie('cookiename', $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 天

未设置的 cookie

setcookie('cookiename', '', time() - 3600, "/");

无需恐慌。只需复制您用于设置 cookie 的功能,现在减去时间。不要混淆,让它简单明了。

于 2016-05-28T11:22:56.980 回答
0

就像正确答案中所说的(我希望它发送一个更新的),要取消设置,用于设置 cookie 的每个参数都是必要的,甚至是安全的和httponly

setcookie("name_cookie", $name_value, 0, '/', $domain, false, true);

未设置

setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);
于 2019-04-12T06:58:53.203 回答
0

这是我对 cookie 的体验,在关闭浏览器窗口(我们用来查看现有 cookie)之前,cookie 可能不会从客户端计算机中删除。所以关闭那个窗口并尝试你的代码。

  • 删除创建中的所有参数时,所有参数都必须存在
  • 时间必须过去
  • 值必须是 ''(空)
  • 文件夹路径在创建时必须相同
于 2020-05-14T11:49:30.013 回答
-1

我很惊讶没有人发布这个,但这对我来说非常有用:

按名称创建或更改 cookie:

$_COOKIE['myCookieName'] = 'I can be changed to whatever u want';

按名称删除 cookie:

unset($_COOKIE['myCookieName']);
于 2014-06-18T17:47:57.523 回答
-1
var remember = $.cookie('auto_login');
if (remember == 'true') {
    var username = $.cookie('username');
    var password = $.cookie('password');
    $('#username').val(username);
    $('#password').val(password);
}

$('#logsub').click(function (event) {
    if ($('#auto_login').is(':checked')) {
        var username = $('#username').val();
        var password = $('#password').val();
        // set cookies to expire in 14 days
        $.cookie('username', username, {expires: 14});
        $.cookie('password', password, {expires: 14});
        $.cookie('auto_login', true, {expires: 14});
    } else {
        // reset cookies
        $.cookie('username', null);
        $.cookie('password', null);
        $.cookie('auto_login', null);
    }
});
于 2016-12-14T12:06:40.797 回答