我无法取消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']); // " "
我做错了什么?
答案 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,我不确定)。