代码如下:
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
迷茫2017-04-10 14:48:15
这个域名特殊。火狐不认为 www.us.com
是 us.com
的二级域名:
var eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
.getService(Components.interfaces.nsIEffectiveTLDService);
eTLDService.getBaseDomain(gBrowser.selectedTab.linkedBrowser.currentURI);
/*
www.us.com
*/
us.com
在 effective_tld_names.dat 文件中列出来了:
// CentralNic : http://www.centralnic.com/names/domains
// Requested by registry <gavin.brown@centralnic.com> 2012-09-27
ae.org
ar.com
br.com
cn.com
com.de
de.com
eu.com
gb.com
gb.net
gr.com
hu.com
hu.net
jp.net
jpn.com
kr.com
no.com
qc.com
ru.com
sa.com
se.com
se.net
uk.com
uk.net
us.com
us.org
uy.com
za.com
PHP中文网2017-04-10 14:48:15
如果是在当前域名下设置 cookie
,不需要把 domain
写出来,直接这样设置:
setcookie('test', 'okh', time() + 3600)
依云大大是对的,是因为域名的特殊性,当你改为一个一般的域名:abc.com
是可以的。
setcookie('test', 'okh', time() + 3600, '/', '.abc.com')