Maison  >  Questions et réponses  >  le corps du texte

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

代码如下:

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

大家讲道理大家讲道理2749 Il y a quelques jours421

répondre à tous(3)je répondrai

  • 迷茫

    迷茫2017-04-10 14:48:15

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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-10 14:48:15

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

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

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

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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-10 14:48:15

    本地的不正常的,很正常

    répondre
    0
  • Annulerrépondre