当前位置:  开发笔记 > 编程语言 > 正文

删除一个cookie

如何解决《删除一个cookie》经验,为你挑选了9个好方法。

当我想删除Cookie时,我试试

unset($_COOKIE['hello']);

我在firefox的cookie浏览器中看到cookie仍然存在.我怎样才能真正删除cookie?



1> Re0sless..:

将值设置为"",将到期日期设置为昨天(或过去的任何日期)

setcookie("hello", "", time()-3600);

然后cookie将在下次加载页面时到期.


@strager [manual](http://php.net/manual/en/function.setcookie.php)声明:_如果设置为0或省略,cookie将在会话结束时到期(当浏览器关闭时) )._这并没有真正删除cookie.我真的不知道IE会不会像Julien所说的那样,但是IE会做一些奇怪的事情.
另外,不要忘记实际取消设置($ _ COOKIE ["hello"]),因为如果页面的其余部分有代码查看$ _COOKIE ["hello"],它仍然会找到它设置.我刚刚得到了这个.
如果你把日期放得太远,那么IE就会吠叫并,但这个价值不会被删除.
另外,设置路径是个好主意,所以setcookie('hello','',time() - 3600,'/');
把时间设置为0(纪元)怎么样?=]

2> Nikunj K...:

你可以试试这个

if (isset($_COOKIE['remember_user'])) {
    unset($_COOKIE['Hello']); 
    setcookie('Hello', null, -1, '/'); 
    return true;
} else {
    return false;
}


我知道这是一个例子,但请永远不要在cookie中存储用户名或密码.
@machineaddict`unset($ _ COOKIE ['Hello']);`如果您可以稍后在代码中检查cookie,那么`实际上很重要.
=======没有在CHROME工作=======我今天尝试了这个代码,当我使用谷歌浏览器访问网站,然后进入chrome的开发者工具,我可以看到过期时间在纪元之前设置为1秒(例如1969-12-31 23:59:59)但是当我接下来提交页面时,cookie被提交给服务器.当我将-1更改为1(例如1970-01-01 00:00:01)时,给出以下命令:setcookie('Hello',null,1,'/'); 然后chrome按预期行事,并且没有提交cookie
工作正常,但试图重新加载页面.它看到cookie设置旧数据为什么?
"unset($ _ COOKIE ['Hello']);`是没有意义的.如果删除它,它什么都不会改变.
我绝对不会在时间戳上使用“ -1”。另外,由于时区的原因,我将使用至少为'86401'的值,这样无论您使用哪种语言环境,您都处于1970年1月。它应该不重要,但是可以肯定的是--1不是一个好主意。

3> Mouloud..:

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

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


仅供参考,如果你使用路径设置cookie,你还需要在这个`setcookie`调用中包含路径:`setcookie('key','',time() - 3600,'/');`
我一直走下页面,答案越来越好,很有趣.但这是最好的一个,不要再看这里了.
这是最好的方法,因为你不需要刷新页面!

4> 小智..:

为了可靠地删除cookie,根据PHP服务器的计算,将其设置为过去的任何时间都是不够的.这是因为客户端计算机可以并且通常确实具有与服务器不同的时间.

最佳做法是使用空白cookie覆盖当前cookie,该空白cookie将在epoch(1970年1月1日00:00:00 UTC)之后的某一秒到期,如下所示:

setcookie("hello", "", 1);


如果我错了,请纠正我,但将其设置为"1"将在时间之后将其设置为秒,而不是将来的某一秒......?我相信你对时区差异是正确的,所以最好的解决方案是将它设置为过去的2天(所以即使是最远的时区仍然会取消cookie).
+1为"1".我不明白为什么所有其他人都非常注重在过去一小时内设置一个已删除的cookie.
@AlexR是的.虽然不能真正回答我的观点.根据我的理解,上面的代码确实*将cookie设置为过去(超过纪元一秒),除非我弄错了.

5> Eric Petroel..:

这将取消代码中的cookie,但由于每个请求都会刷新$ _COOKIE变量,因此它只会返回下一页请求.

要真正摆脱cookie,请设置过去的过期日期:

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);


@PratikCJoshi仅当您的代码稍后会查找它时。

6> 小智..:

我的代码中遇到了同样的问题,发现它是一个cookie路径问题.看看这个堆栈溢出帖子:无法删除php set cookie

我使用路径值"/"设置了cookie,但是当我尝试清除它时没有任何路径值,所以它不清楚.所以这是一个有效的例子:

设置cookie:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

清除cookie:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

希望有所帮助.



7> Alistair Kno..:

如果您将Cookie设置为过去,则浏览器会将其删除.请参阅php.net上的setcookie()删除示例



8> Jarret Hardi..:

请参阅PHP文档中标有" Example#2 setcookie()删除示例 "的示例.要从浏览器中清除cookie,您需要告诉浏览器cookie已过期...浏览器将删除它.unset正如您所使用它只是从COOKIE数组中删除'hello'cookie.



9> Nulik..:

当您执行以下操作时,这就是PHP v7 setcookie()代码的工作方式:


服务器在嗅探端口80时从tcpdump的输出将以下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

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有