代码如下:
header("Content-type: text/html; charset=utf-8");
if (isset($_COOKIE['test']))
{
echo '获取到的cookies是:'.$_COOKIE['test'];
}
elseif (setcookie('test', 'okh', time() + 3600, '/', '.us.com'))
{
echo '设置cookies:test';
}
else
{
echo '什么都没有';
}
用us.com访问,上面这段代码在chrome下一直设置成功,但是却一直都没记录
找了半天原因,一朋友从手册上告诉我:
The domain that the cookie is available to. Setting the domain to
'www.example.com' will make the cookie available in the www subdomain
and higher subdomains. Cookies available to a lower domain, such as
'example.com' will be available to higher subdomains, such as
'www.example.com'. Older browsers still implementing the deprecated »
RFC 2109 may require a leading . to match all subdomains.
于是我做了这么一个调整:
修改之前的代码为
setcookie('test', 'okh', time() + 3600, '/', 'www.us.com')
这下正常设置,也正常记录了。
但是存在2个问题:
PS:我知道去掉domian这个参数就可以成功设置了,不过我的需求是设置不同域下的cookies,不仅仅是一个域名下,所以我还是希望保留这个参数的,最好是能设置诸如:.us.com
这个域名特殊。火狐不认为
www.us.com
是us.com
的二级域名:us.com
在 effective_tld_names.dat 文件中列出来了:如果是在当前域名下设置
cookie
,不需要把domain
写出来,直接这样设置:依云大大是对的,是因为域名的特殊性,当你改为一个一般的域名:
abc.com
是可以的。本地的不正常的,很正常