当我想删除Cookie时,我试试
unset($_COOKIE['hello']);
Run Code Online (Sandbox Code Playgroud)
我在firefox的cookie浏览器中看到cookie仍然存在.我怎样才能真正删除cookie?
Re0*_*ess 281
将值设置为"",将到期日期设置为昨天(或过去的任何日期)
setcookie("hello", "", time()-3600);
Run Code Online (Sandbox Code Playgroud)
然后cookie将在下次加载页面时到期.
Nik*_* K. 264
你可以试试这个
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
setcookie('Hello', null, -1, '/');
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
Mou*_*oud 216
删除cookie的一种干净方法是清除$_COOKIE值和浏览器cookie文件:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
Run Code Online (Sandbox Code Playgroud)
小智 26
为了可靠地删除cookie,根据PHP服务器的计算,将其设置为过去的任何时间都是不够的.这是因为客户端计算机可以并且通常确实具有与服务器不同的时间.
最佳做法是使用空白cookie覆盖当前cookie,该空白cookie将在epoch(1970年1月1日00:00:00 UTC)之后的某一秒内到期,如下所示:
setcookie("hello", "", 1);
Run Code Online (Sandbox Code Playgroud)
Eri*_*lje 20
这将取消代码中的cookie,但由于每个请求都会刷新$ _COOKIE变量,因此它只会返回下一页请求.
要真正摆脱cookie,请设置过去的过期日期:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
Run Code Online (Sandbox Code Playgroud)
小智 14
我的代码中遇到了同样的问题,发现它是一个cookie路径问题.看看这个堆栈溢出帖子:无法删除php set cookie
我使用路径值"/"设置了cookie,但是当我尝试清除它时没有任何路径值,所以它不清楚.所以这是一个有效的例子:
设置cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Run Code Online (Sandbox Code Playgroud)
清除cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
请参阅PHP文档中标有" Example#2 setcookie()删除示例 "的示例.要从浏览器中清除cookie,您需要告诉浏览器cookie已过期...浏览器将删除它.unset正如您所使用它只是从COOKIE数组中删除'hello'cookie.
当您执行以下操作时,这就是PHP v7 setcookie()代码的工作方式:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Run Code Online (Sandbox Code Playgroud)
服务器在嗅探端口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
Run Code Online (Sandbox Code Playgroud)
在以下请求中观察数据包,浏览器不再在标头中发送这些cookie
小智 7
如果您想从当前的所有域中完全删除 cookie,那么以下代码肯定会对您有所帮助。
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Run Code Online (Sandbox Code Playgroud)
此代码将从您的所有域中完全删除 cookie 变量,即;“ / ” - 它表示 cookie 变量的值是为所有域设置的,而不仅仅是当前域或路径。time() - 300 表示它设置为之前的时间,因此它将过期。
这样就完美删除了。
只需将 cookie 的值设置false为以取消设置,
setcookie('cookiename', false);
Run Code Online (Sandbox Code Playgroud)
PS:-这是最简单的方法。
要删除 cookie,您只需将该值设置为 NULL:
“如果您为 cookie 设置了过期时间、路径或域的非默认值,则在删除 cookie 时必须再次提供相同的值,以便正确删除 cookie。” 引用自《学习PHP5》一书。
所以这段代码应该有效(对我有效):
设置cookie:
setcookie('foo', 'bar', time() + 60 * 5);
删除cookie:
setcookie('foo', '', time() + 60 * 5);
但我注意到每个人都将到期日期设置为过去,这是必要的吗?为什么?