删除一个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']);