0

我无法取消设置 cookie。

cookie 集:(id,别名)

setcookie("id",$data['id'], time()+3600*24*30);
setcookie("alias",$this->nombre, time()+3600*24*30);

cookie 未设置?(身份证,别名)

setcookie("id","-1",time()-315360000);
setcookie("alias","",time()-315360000);
unset($_COOKIE['id']);       // additional, but still no..
unset($_COOKIE['alias']);    //    "            "

我做错了什么?

4

2 回答 2

2

将时间设置为一个小时后怎么样,而不是那个大数字?

setcookie("alias", "", time()-3600);
于 2011-03-30T00:54:27.453 回答
1

使用您的示例,我创建了此测试:

<?php

ob_start();

echo '<pre>';

setcookie("id","0001", time()+3600*24*30);
setcookie("alias","name", time()+3600*24*30);

print_r($_COOKIE);

if ($_COOKIE['id'] || $_COOKIE['alias']) {
    setcookie("id","-1",time()-315360000);
    setcookie("alias","",time()-315360000);
}

print_r($_COOKIE);

ob_end_flush();

?>

在第一次加载时,它输出:

Array
(
)
Array
(
)

重新加载时:

Array
(
    [id] => 0001
    [alias] => name
)
Array
(
    [id] => 0001
    [alias] => name
)

在第二次重新加载:

Array
(
)
Array
(
)

因此,您的代码似乎正在重置往返中的 cookie。

编辑

以下:

<?php

ob_start();

echo '<pre>';

setcookie("id","0001", time()+3600*24*30);
setcookie("alias","name", time()+3600*24*30);

print_r($_COOKIE);

if ($_COOKIE['id'] || $_COOKIE['alias']) {
    setcookie("id","-1",time()-315360000);
    setcookie("alias","",time()-315360000);
    unset($_COOKIE['id']);
    unset($_COOKIE['alias']);
}

print_r($_COOKIE);

ob_end_flush();

?>

将打印:

Array
(
)
Array
(
)

或将打印:

Array
(
    [id] => 0001
    [alias] => name
)
Array
(
)

http://jfcoder.com/test/cookies.php(点击重新加载几次)

如果您需要告诉浏览器忘记 cookie,请使用setcookie()及时设置的时间(我使用至少 24 小时)。如果您需要$_COOKIES数组忘记值,请使用unset().

编辑

这里有两个可能的问题,一个是 cookie 上的子域不匹配,另一个是路径可访问性问题。

例如...

如果访问者访问的 url 与尝试重置 cookie 的 url 所在的目录不同,则需要使用允许其他路径访问(和重置)该 cookie 的路径来设置 cookie。

setcookie('my', 'cookie', time()+3600, '/');

或者允许包含在子目录中的路径...

setcookie('my', 'cookie', time()+3600, '/my/path/');

如果访问者访问的 url 是子域(包括 www),但您希望 cookie 可被所有子域访问,则需要为 setcookie 提供通配符。

setcookie('my', 'cookie', time()+3600, '/', '.example.com');

将允许来自 www.example.com、my.example.com 和 sub.example.com 的 URL 访问和重置 cookie。显然,此时也需要考虑您的路径考虑,因为对于子域参数,您需要包含路径。/选择 url 上的所有子目录,并且.在域选择子域之前(虽然 sub.sub.domains,我不确定)。

http://php.net/manual/en/function.setcookie.php

于 2011-03-30T01:11:32.800 回答