2024-02-28 09:00:02

移除一块饼干

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

unset($_COOKIE['hello']);

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


当前回答

如果您将cookie设置为过去过期时间,浏览器将删除它。参见setcookie() delete example at php.net

其他回答

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

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

// set the expiration date to one hour ago
setcookie("hello", "", 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在你的服务器,也与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("hello", "", time()-3600);

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

大多数人都忘记了这只能在本地机器上工作。 在某个域上,您将需要类似此示例的模式。

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