当前位置:Gxlcms > PHP教程 > 我设置cookies成功了,再次刷新页面后,设置的cookies没有了

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

时间: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.

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

  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

回复内容:

代码如下:

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

这个域名特殊。火狐不认为 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.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')

本地的不正常的,很正常

人气教程排行