当我想删除Cookie时,我试试
unset($_COOKIE['hello']);
我在firefox的cookie浏览器中看到cookie仍然存在.我怎样才能真正删除cookie?
将值设置为"",将到期日期设置为昨天(或过去的任何日期)
setcookie("hello", "", time()-3600);
然后cookie将在下次加载页面时到期.
你可以试试这个
if (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); setcookie('Hello', null, -1, '/'); return true; } else { return false; }
删除cookie的一种干净方法是清除$_COOKIE
值和浏览器cookie文件:
if (isset($_COOKIE['key'])) { unset($_COOKIE['key']); setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp }
为了可靠地删除cookie,根据PHP服务器的计算,将其设置为过去的任何时间都是不够的.这是因为客户端计算机可以并且通常确实具有与服务器不同的时间.
最佳做法是使用空白cookie覆盖当前cookie,该空白cookie将在epoch(1970年1月1日00:00:00 UTC)之后的某一秒内到期,如下所示:
setcookie("hello", "", 1);
这将取消代码中的cookie,但由于每个请求都会刷新$ _COOKIE变量,因此它只会返回下一页请求.
要真正摆脱cookie,请设置过去的过期日期:
// set the expiration date to one hour ago setcookie("hello", "", time()-3600);
我的代码中遇到了同样的问题,发现它是一个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']);
希望有所帮助.
如果您将Cookie设置为过去,则浏览器会将其删除.请参阅php.net上的setcookie()删除示例
请参阅PHP文档中标有" Example#2 setcookie()删除示例 "的示例.要从浏览器中清除cookie,您需要告诉浏览器cookie已过期...浏览器将删除它.unset
正如您所使用它只是从COOKIE数组中删除'hello'cookie.
当您执行以下操作时,这就是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