饼干不会被取消

时间:2011-03-30 00:49:46

标签: php cookies unset

我无法取消cookie。

cookie set:(id,alias)

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

饼干未设置? (id,别名)

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

如何将时间设置为一小时,而不是那么大?

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

答案 1 :(得分: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上的子域不匹配,以及路径可访问性问题。

例如......

如果访问者访问的网址位于与尝试重置Cookie的网址不同的目录上,则需要设置一个路径,以允许其他路径访问(并重置)该Cookie。

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

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

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

如果访问者访问的网址是子网域(包括www),但您希望所有子域都可以访问该Cookie,则需要为setcookie提供通配符。

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

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

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