删除cookie的问题,不会被取消

时间:2010-05-18 10:32:56

标签: php cookies unset

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

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

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

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

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

我在stackoverflow上发现了this问题: ,但没有一个答案解决了这个问题。我也试过把所有的参数都放进去,就像作者说的那样,但它没有效果。

有没有人看到这个问题?

18 个答案:

答案 0 :(得分:51)

The manual states

  

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

因此,请确保正确指定$path - 同时删除。例如,如果在子目录中指定了cookie,则可能无法从父目录或子目录(或两者)中删除它。

我不完全确定权限的工作方式,但您可能希望使用Web Developer Toolbar查看路径对您尝试删除的Cookie的影响。

答案 1 :(得分:9)

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

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

我还没试过吗?无论如何,它现在有效。感谢您的帮助,人们!

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:2)

我尝试使用

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

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

答案 4 :(得分:2)

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

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}

答案 5 :(得分:2)

如果您针对特定路径删除 Cookie,并且您的路径参数以尾部斜杠'/'结尾,那么它将在Firefox中有效和IE,但不适用于Chrome和Opera。如果没有尾部斜杠,那么它只能在Chrome和Opera中使用。

所以你应该同时使用两者:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE

答案 6 :(得分:1)

这对我有用:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);

答案 7 :(得分:1)

设置Cookie

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

取消设置Cookie

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

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

答案 8 :(得分:0)

这是我对cookie的经验,在关闭浏览器窗口(我们用来查看现有cookie的窗口)之前,可能无法从客户端计算机上删除cookie。因此,请关闭该窗口并尝试您的代码。

  • 删除创建时已存在的所有参数
  • 时间必须是过去的时间
  • 值必须为”(空)
  • 文件夹路径在创建时必须相同

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

就像正确答案中所说的一样(我希望它发送更新的答案),要取消设置,用于设置cookie的每个参数都是必需的,即使是安全 httponly < / strong>

设置

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

未设置

setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);

答案 11 :(得分: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);
}

答案 12 :(得分:0)

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

进入例如。 Chrome Cookie设置并检查Cookie路径,然后添加setcookie命令的路径,并将其删除如下:

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

尝试删除或取消设置保存在错误路径中的cookie将无法正常工作,并且非常令人沮丧。

答案 13 :(得分:0)

我有类似的问题。

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

echo '{}';
setcookie('username', '', time()-3600, '/');

答案 14 :(得分:0)

我建议使用

ob_start();

在第一个

答案 15 :(得分:0)

虽然发生了十次,但也发生在我身上。我想这是我们编码方式的问题。

这是我的代码

setcookie("token", "", time() - 36000, "/");

答案 16 :(得分:-1)

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

按名称创建或更改Cookie:

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

按名称删除Cookie:

unset($_COOKIE['myCookieName']);

答案 17 :(得分:-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);
    }
});