删除一个cookie

当我想删除一个Cookie我尝试

unset($_COOKIE['hello']); 

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

你可以试试这个

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

将该值设置为“”,并将到期date设置为昨天(或过去的任何date)

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

然后,Cookie将在下次加载页面时过期。

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

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

这将取消您的代码中的cookie,但由于$ _COOKIEvariables刷新每个请求,它会回来的下一页请求。

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

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

要可靠地删除一个cookie,不能将其设置为过期,这是因为客户端计算机可能并经常有与您的服务器不同的时间。 最好的做法是用未来会过一秒的空白cookie覆盖当前的cookie,

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

我在我的代码中遇到同样的问题,发现它是一个cookiepath问题。 看看这个堆栈溢出的post: 不能删除php设置的cookie

我已经使用path值“/”设置了cookie,但是当我尝试清除它时没有任何path值,所以不清楚。 所以这里是一个工作的例子:

设置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()delete example ”的示例 。 要清除浏览器中的cookie,您需要告诉浏览器Cookie已过期,然后浏览器将其删除。 unset就像刚刚使用的那样,只是从COOKIE数组中删除“hello”cookie。

这是PHP v7 setcookie()代码在您执行操作时的工作方式:

 <?php setcookie('user_id',''); setcookie('session',''); ?> 

在端口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

要删除cookie,只需要将该值设置为NULL:

“如果您已经设置了一个非默认值的Cookie,并保存到期时间,path或域名,那么当您删除Cookie以便正确删除Cookie时,您必须再次提供相同的值。” 从“学习PHP5”书中引用。

所以这个代码应该工作(为我工作):

设置cookie: setcookie('foo', 'bar', time() + 60 * 5);

删除cookie: setcookie('foo', '', time() + 60 * 5);

但是我注意到,每个人都将过期设置为过去,这是必要的,为什么?

要删除所有你可以写的cookies:

 foreach ($_COOKIE as $key => $value) { unset($value); setcookie($key, '', time() - 3600); } 

只要将过期date设置为一小时前,如果您想要“移除”cookie,如下所示:

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

要么

 setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1); 

资料来源: http : //www.php.net/manual/en/function.setcookie.php

您应该使用filter_input()函数来访问访问者可以input/处理的所有全局variables,如下所示:

 $visitors_ip = filter_input(INPUT_COOKIE, 'id'); 

你可以阅读更多关于它在这里: http : //www.php.net/manual/en/function.filter-input.php和在这里: http : //www.w3schools.com/php/func_filter_input.asp

我知道这个主题已经创build了很长时间,但是我在这个解决scheme中看到了一个小错误(我可以这样称呼它,因为它是一个细节)。 我同意更好的解决scheme可能是这个解决scheme:

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

但是,在目前的情况下,您可以在任何未设置function的情况下删除cookie,并立即创build新的过期cookie,以防未设置的function无效。

这意味着,即使未设置的function,它仍然有2个cookies在电脑上。 从逻辑的angular度来看,要求的目标是在可能的情况下删除cookies,如果不可行,则使其到期; 得到“最干净”的结果。

所以,我认为我们应该做的更好:

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

感谢,并有一个愉快的一天 :)

 $cookie_name = "my cookie"; $cookie_value = "my value"; $cookie_new_value = "my new value"; // Create a cookie, setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds // Get value in a cookie, $cookie_value = $_COOKIE[$cookie_name]; // Update a cookie, setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/"); // Delete a cookie, setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour. 

这很简单!

 setcookie("cookiename", "cookievalue", 1); 

您可以根据Cookie值设置会话variables

 session_start(); if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){ $_SESSION['loggedin'] = "true"; } echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue"); 

你可以简单地使用这个自定义function:

 function unset_cookie($cookie_name) { if (isset($_COOKIE[$cookie_name])) { unset($_COOKIE[$cookie_name]); setcookie($cookie_name, null, -1); } else { return false; } } 

如果你想删除$ _COOKIE ['user_account']。
只要使用:

 unset_cookie('user_account'); 

你必须在你的服务器上用php删除cookies,用js来删除你的浏览器。(他们用php做了,但是cookie文件也在浏览器客户端中):

一个例子:

 if ($_GET['action'] == 'exit'){ // delete cookies with js and then in server with php: echo ' <script type="text/javascript"> var delete_cookie = function(name) { document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;"; }; delete_cookie("madw"); delete_cookie("usdw"); </script> '; unset($_COOKIE['cookie_name']); unset($_COOKIE['cookie_time']); 

大多数人都忘记了这只会在本地机器上工作。 在一个域中,你将需要一个像这个例子一样的模式。

 setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);