移除一块饼干

当我想要删除Cookie时,我会尝试

unset($_COOKIE['hello']);

我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?

716387 次浏览

将值设置为"",过期日期设置为昨天(或过去的任何日期)

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

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

请参阅PHP文档中标记为“例2 setcookie()删除示例”的示例。要清除浏览器中的cookie,您需要告诉浏览器该cookie已经过期……然后浏览器将删除它。unset正如你所使用的,它只是从cookie数组中删除'hello' cookie。

如果您将cookie设置为过去过期时间,浏览器将删除它。看到Setcookie()删除实例在php.net

这将在代码中取消设置cookie,但由于$_COOKIE变量在每个请求中都被刷新,因此它只会在下一次页面请求中返回。

要真正摆脱cookie,请将过期日期设置为过去:

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

您可以根据cookie值设置会话变量

session_start();


if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}


echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");

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

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

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

"如果您为cookie设置了过期时间、路径或域的非默认值,则在删除cookie时必须再次提供这些相同的值,以便正确删除cookie。"

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

设置cookie setcookie('foo', 'bar', time() + 60 * 5); < / p >

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

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

要可靠地删除cookie,仅将其设置为PHP服务器计算的过去任何时间过期是不够的。这是因为客户端计算机的时间可能而且经常与服务器的时间不同。

最好的做法是用一个空白的cookie覆盖当前的cookie,该cookie在epoch(1970年1月1日00:00:00 UTC)之后一秒过期,如下所示:

setcookie('hello', '', 1);

你可以试试这个

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

要删除所有cookie,您可以这样写:

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

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

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

但是,在目前的情况下,您删除了所有unset函数工作的情况下的cookie,并立即创建新的过期cookie,以防unset函数不起作用。

这意味着即使unset函数工作,它仍将在计算机上有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路径问题。查看这个堆栈溢出帖子:不能删除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,就像这样:

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

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

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'].
.< p>如果你想删除$_COOKIE['user_account'] 只使用:< / p >

unset_cookie('user_account');
$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);

这是如何PHP v7 setcookie()代码工作时,你这样做:

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

从tcpdump在端口80上嗅探时的输出,服务器向客户端(浏览器)发送以下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

大多数人都忘记了这只能在本地机器上工作。 在一个域上,你将需要一个像这个例子一样的模式
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);

你必须删除cookie与php在你的服务器,也与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']);

如果你想从你当前的所有域中完全删除cookie,那么下面的代码一定会帮助你。

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

这段代码将删除cookie变量完全从所有的域,即;" / " -它表示cookie变量的值为所有域设置,而不仅仅是当前域或路径。Time() - 300表示它设置为以前的时间,因此它将过期。

这就是它被完美删除的方式。

当你为时间输入0时,你的意思是浏览器的“现在”(从现在开始的+0s实际上是现在),它会删除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

只需将cookie的值设置为false,以便取消设置:

setcookie('cookiename', false);

我发现在Chrome浏览器中,除非你在cookie中定义最后三个参数,否则不可能取消设置cookie。域名,它是安全的,只有http…

if (isset($_COOKIE['user_id'])) {
unset($_COOKIE['user_id']);
setcookie("user_id", "", time() - 3600, "/", 'yourdomain.com',true,true);
header('Location: /');
} else {
/* other code here */
}
我就是这样让它为我工作的。 阅读文档:所有关于PHP官方网站的cookie

我在php中使用这个,它工作很好。

function cookie_unset()
{
setcookie("cookie_name", "", time() - 3600, '/');
unset ($_COOKIE['cookie_name']);
//done
}