2

你好,我正在疯狂地解决我试图获取的问题。

我无法像这样删除将在 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不起作用。

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

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

谢谢。

4

3 回答 3

6

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

例如,您这样设置 cookie:

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

你像这样取消它们:

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

缺少最后两个参数将使您处于当前的情况。

于 2013-03-05T12:27:20.703 回答
1

删除每个 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, '/');
    }
}
于 2013-03-05T12:26:12.043 回答
0

设置cookie时始终设置路径,否则不会破坏

于 2020-11-11T09:32:25.837 回答