【问题标题】:delete cookie does not work删除 cookie 不起作用
【发布时间】:2013-02-19 20:12:58
【问题描述】:

你好,我正在为一个我试图获取的问题而发疯。

我无法像这样删除将在 index.php 上设置的 cookie:

$a = 'text';
setcookie('name_of_cookie', $a, time()+60*60*24*365);

在 page-php 上,我可以调用该 cookie,内容就像 $a。我试图像这样在 page.php 上删除不同的方式:

setcookie('name_of_cookie', FALSE, time()-3600);

我还发现了一个我只设置为的版本:

setcookie('name_of_cookie');

什么会像我在浏览器的设置中看到的那样设置另一个同名的cookie。新 cookie 没有内容 - 当然,没有声明任何内容。

由于服务器位置的原因,我还尝试在过去设置一个更高的时间,但这也不起作用。即使尝试将时间设置为 1 也不起作用。

我检查了几次名字的拼写,没有错误来自不同的名字。

如果有人能告诉我我做错了什么,我会很高兴?

谢谢。

【问题讨论】:

  • 请关闭浏览器并重试,因为在销毁 Cookie 后,只有在重新启动浏览器后才会将其删除。

标签: php session cookies setcookie


【解决方案1】:

设置cookie的时候一定要设置路径,否则不会破坏

【讨论】:

    【解决方案2】:

    当您设置 Cookie 时非常具体地说明如何设置它们始终设置域名(可以取自 $_SERVER['SERVER_NAME'])和路径(我通常设置为“/”)。如果您不一致,某些事情可能会采取“聪明”的主动性并打破您的逻辑。当您在 JS 中设置 cookie 并尝试从 PHP 中删除它们(或相反)时,经常会发生这种情况。您可能有多个名称相同但子域或路径不同的 cookie。

    例如,您这样设置 cookie:

    setcookie( 'Foo', 'Bar', time() + 3600, '/', $_SERVER['SERVER_NAME'] );
    

    然后你像这样取消它们:

    setcookie( 'Foo', '', time() - 999999, '/', $_SERVER['SERVER_NAME'] );
    

    缺少 2 个最后的论点将使您处于目前的情况。

    【讨论】:

    • 快速给我投反对票,然后更正你对我的回答,不错 =o)
    • 我更正的是用 '' 删除 false ,这是一个有效点。这个问题的答案是确保 OP 使用域名和路径设置/取消设置 cookie。你可以在他的问题中发现他最终得到了多个同名的 cookie。你没有解释。
    • @cryptic ツ 快为我点赞和接受,因为很容易理解我的代码有什么问题=o)
    • 奇怪的是,我认为重新加载浏览器时cookie会被删除。我在 chrome 上对其进行了测试,行为就像删除会话一样?!我没有重新启动 chrome 但刚重新加载时无法调用 cookie 的内容?!谢谢。
    • Chrome 可能会与 cookie 混淆。我从不信任那里的任何 cookie 检查员。在调查 cookie 问题时,最好有一个通过 $_COOKIE 进行迭代的 PHP 页面。这会让你相信你所看到的是真实的。另一件事是每个浏览器可能有不同的实现,所以这就是为什么它需要具体。当您从 JavaScript 设置 cookie 时,它​​会变得更加混乱。
    【解决方案3】:

    如下删除所有 cookie。

    if (isset($_SERVER['HTTP_COOKIE']))
    {
        $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
        foreach($cookies as $cookie) {
            $parts = explode('=', $cookie);
            $name = trim($parts[0]);
            setcookie($name, '', time()-1000);
            setcookie($name, '', time()-1000, '/');
        }
    }
    

    【讨论】:

    • 为什么不直接遍历超全局$_COOKIE
    • @crypticツ 因为它包含用户代理发送的 'Cookie' 标头的原始值
    • 原始值无关紧要,因为您只需要 cookie 名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2018-03-21
    • 2014-12-02
    • 2017-02-11
    • 1970-01-01
    • 2011-05-08
    • 2021-07-09
    相关资源
    最近更新 更多