使用默认域创建cookie时,无法删除具有显式域的cookie

时间:2012-04-15 22:09:26

标签: php google-chrome cookies

我有一个网站,我们称之为www.example.com在该网站上有两页。一个人创建一个像这样的cookie:

setcookie('daCookie', 'boo', 2000000000, '/', '', false, true);

另一个试图像这样删除它:

setcookie('daCookie', '', 1, '/', 'www.example.com', false, true);
setcookie('daCookie', '', 1, '/', '.www.example.com', false, true);

现在,我知道第一个脚本是在www.example.com的上下文中调用的。如果我使用浏览器(在本例中为Google Chrome)开发人员工具,我可以看到Cookie的域名为www.example.com。但是第二次调用不会删除它。如果我将其更改为空域:

setcookie('daCookie', '', 1, '/', '', false, true);

然后它有效。但我真的想明确指定域名。为什么不起作用?

2 个答案:

答案 0 :(得分:2)

我相信第二次调用(显式传递域名),浏览器可以在值前加上一个点(。),因为它是一个域。这就是为什么该调用不会删除之前设置的cookie(不传递$ domain param。)

答案 1 :(得分:0)

从php手册中,所有示例(显式传递域名)都使用:

setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);

在明确传递domain参数的情况下,看起来最好忽略'www。'

关于域参数,还有这个说法:

  

Cookie可用的域。将域设置为   'www.example.com'将在www子域中提供cookie   更高的子域名。 Cookie可用于较低域名,例如   'example.com'将可用于更高的子域,例如   'www.example.com'。较旧的浏览器仍在实施已弃用的»   RFC 2109可能需要领先。匹配所有子域。