时间:2021-07-01 10:21:17 帮助过:16人阅读
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
代码如下:
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
的二级域名:
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 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
如果是在当前域名下设置 cookie
,不需要把 domain
写出来,直接这样设置:
setcookie('test', 'okh', time() + 3600)
依云大大是对的,是因为域名的特殊性,当你改为一个一般的域名:abc.com
是可以的。
setcookie('test', 'okh', time() + 3600, '/', '.abc.com')
本地的不正常的,很正常