删除一个cookie

时间:2009-03-26 14:59:16

标签: php cookies

当我想删除Cookie时,我尝试

unset($_COOKIE['hello']);

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

22 个答案:

答案 0 :(得分:268)

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

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

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

答案 1 :(得分:246)

你可以尝试这个

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

答案 2 :(得分:205)

删除Cookie的一种简洁方法是清除$_COOKIE值和浏览器Cookie文件:

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

答案 3 :(得分:22)

为了可靠地删除cookie,根据PHP服务器的计算,将其设置为过去的任何时间是不够的。这是因为客户端计算机的时间通常与服务器的时间不同。

最佳做法是使用空白cookie覆盖当前cookie,该空白cookie将在纪元(1970年1月1日00:00:00 UTC)之后在将来中过期一秒,如下所示:

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

答案 4 :(得分:18)

这将取消代码中的cookie,但由于$ _COOKIE变量会在每个请求中刷新,因此它将返回到下一页请求。

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

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

答案 5 :(得分:13)

我的代码中遇到了同样的问题,发现这是一个cookie路径问题。查看此堆栈溢出帖子:Can't delete 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']);

希望有所帮助。

答案 6 :(得分:7)

如果您将Cookie设置为过去,则浏览器会将其删除。见setcookie() delete example at php.net

答案 7 :(得分:6)

请参阅PHP文档中标有“Example #2 setcookie() delete example”的示例。要从浏览器中清除cookie,您需要告诉浏览器cookie已过期...浏览器将删除它。 unset正如您所使用它只是从COOKIE数组中删除'hello'cookie。

答案 8 :(得分:6)

这就是PHP v7 setcookie()代码的工作方式:

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

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

答案 9 :(得分:3)

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

“如果您为过期时间,路径或域设置了具有非默认值的Cookie,则在删除要正确删除Cookie的cookie时,必须再次提供相同的值。” 引自“学习PHP5”一书。

所以这段代码应该有效(对我有用):

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

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

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

答案 10 :(得分:2)

要删除您可以写的所有Cookie:

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

答案 11 :(得分:1)

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

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;
        }

谢谢,祝你有愉快的一天:)

答案 12 :(得分:1)

如果要“删除”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

答案 13 :(得分:1)

$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.

答案 14 :(得分:0)

您只需使用此自定义功能:

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

如果您要删除$ _COOKIE [&#39; user_account&#39;]。
只需使用:

unset_cookie('user_account');

答案 15 :(得分:0)

这很简单!

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

答案 16 :(得分:0)

您可以根据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");

答案 17 :(得分:0)

如果您想从当前所有域中完全删除cookie,那么以下代码肯定会对您有所帮助。

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

此代码将从您的所有域中完全删除Cookie变量,即; “ /”-它表示cookie变量的值都是为所有域设置的,而不仅仅是为当前域或路径设置的。 time()-300表示它设置为上一个时间,因此它将过期。

这就是完美删除的方式。

答案 18 :(得分:0)

输入0作为时间,是指浏览器“现在”

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

答案 19 :(得分:0)

只需将cookie的值设置为false即可取消

setcookie('cookiename', false);

PS:-这是最简单的方法。

答案 20 :(得分:-2)

您必须在服务器中使用php删除cookie,并使用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']);

答案 21 :(得分:-5)

大多数人都忘记了这只适用于本地计算机。 在域上,您将需要一个类似于此示例的模式。

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