我已经尝试在php手册和互联网上搜索如何删除cookie,我尝试过的方式完全相同:
setcookie("name", '', 1);
或
setcookie("name", '', time()-3600);
但是当我在Firefox中检查cookie对话框中的cookie时,它仍然具有相同的值。 我使用以下行设置此cookie:
setcookie("name", $value, time() + 259200, $path);
我在stackoverflow上发现了this问题: ,但没有一个答案解决了这个问题。我也试过把所有的参数都放进去,就像作者说的那样,但它没有效果。
有没有人看到这个问题?
答案 0 :(得分:51)
必须使用与设置相同的参数删除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);
}
});