Answers:
你可以试试这个
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
。如果将其删除,它什么也不会改变。
unset($_COOKIE['Hello']);
如果您可能稍后在代码中的某个地方检查Cookie,则@machineaddict 实际上很重要。
将值设置为“”,将到期日期设置为昨天(或过去的任何日期)
setcookie("hello", "", time()-3600);
然后,cookie将在页面下次加载时过期。
删除cookie的一种干净方法是清除$_COOKIE
值和浏览器cookie文件:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
调用中包括该路径:setcookie('key', '', time() - 3600, '/');
unsetting
成功了。
要可靠地删除cookie,不足以将其设置为过去的任何时间(由您的PHP服务器计算)过期。这是因为客户端计算机可以并且经常确实具有与服务器不同的时间。
最好的做法是一个空白的cookie,其到期一秒到覆盖当前饼干在未来历元之后(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);
unset()
Cookie 不需要了吗?
我在代码中遇到了同样的问题,发现这是一个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()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设置为非默认值,则在删除该cookie时必须再次提供这些相同的值,才能正确删除该cookie。” 引用“学习PHP5”一书。
所以这段代码应该工作(对我有用):
设置cookie:
setcookie('foo', 'bar', time() + 60 * 5);
删除Cookie:
setcookie('foo', '', time() + 60 * 5);
但是我注意到每个人都将过期日期设置为过去,这是否有必要,为什么?
''
是不同的东西null
。
要删除所有cookie,您可以编写:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
如果您要“删除” cookie,只需将过期日期设置为一小时前,如下所示:
setcookie ("TestCookie", "", time() - 3600);
要么
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
资源: http //www.php.net/manual/en/function.setcookie.php
您应该filter_input()
对访问者可以输入/操作的所有全局函数使用该函数,如下所示:
$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
我知道自创建该主题以来已经有很长时间了,但是在该解决方案中我看到了一个小错误(我可以这样称呼它,因为它是一个细节)。我同意更好的解决方案可能是以下解决方案:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
但是,在当前情况下,在未设置功能起作用的每种情况下,您都删除cookie,并在未设置功能不起作用的情况下立即创建新的过期的cookie。
这意味着即使取消设置功能起作用,它在计算机上仍将具有2个cookie。从逻辑上讲,要求的目标是删除cookie,如果可能的话,如果不是,则使它们过期;以获得“最干净”的结果。
因此,我认为我们最好这样做:
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.
如果您想从当前所有域中完全删除cookie,那么以下代码一定会对您有所帮助。
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
此代码将从您的所有域中完全删除cookie变量,即;“ /”-它表示cookie变量的值都是为所有域设置的,而不仅仅是为当前域或路径设置的。time()-300表示它设置为以前的时间,因此它将过期。
那就是它完美删除的方式。
输入0
时间时,对于浏览器来说是“现在”(实际上从现在开始是+0),它会删除Cookie。
setcookie("key", NULL, 0, "/");
我在chrome浏览器中检查了它,它给了我:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
您必须使用服务器中的php以及浏览器的js删除cookie。(它们是使用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']);
setcookie
适用于任何域,无论是否为localhost。
$cookie->delete()
从github.com/delight-im/PHP-Cookie中找到帮助。问题中的代码仅删除服务器端已解析的属性。Cookie仍将驻留在客户端上。