使用您的示例,我创建了此测试:
<?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