我设置cookies成功了,再次刷新页面后,设置的cookies没有了

李惟
  • 2.1k

代码如下:

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.

于是我做了这么一个调整:

  1. 用www.us.com进行访问
  2. 修改之前的代码为

    setcookie('test', 'okh', time() + 3600, '/', 'www.us.com')

这下正常设置,也正常记录了。

但是存在2个问题:

  1. 请问如何设置不带WWW的域名的cookies呢?比如:us.com
  2. 设置www.us.com虽然能在www.us.com下使用,但是却不能在us.com下使用,如何设置cookies使其通用呢?

PS:我知道去掉domian这个参数就可以成功设置了,不过我的需求是设置不同域下的cookies,不仅仅是一个域名下,所以我还是希望保留这个参数的,最好是能设置诸如:.us.com

回复
阅读 8.6k
3 个回答
依云
  • 24.9k
✓ 已被采纳

这个域名特殊。火狐不认为 www.us.comus.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.comeffective_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
StephenLi
  • 7k

如果是在当前域名下设置 cookie,不需要把 domain 写出来,直接这样设置:

setcookie('test', 'okh', time() + 3600)

请输入图片描述

依云大大是对的,是因为域名的特殊性,当你改为一个一般的域名:abc.com 是可以的。

setcookie('test', 'okh', time() + 3600, '/', '.abc.com')

请输入图片描述

哈哈_374235
  • -3
新手上路,请多包涵

本地的不正常的,很正常

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏