无法使Cookie适用于子域

时间:2013-05-21 15:01:06

标签: php apache session cookies subdomain

更新:看起来因为本地计算机托管而无效,特别是使用了短域名(如'.t')。 具有实际(真实)域名使用的远程服务器上的相同代码可以正常工作。

有两个域(root和它们的sub)都在运行查看同一个webserver的目录,因此,处理完全相同的脚本。 (我在家用计算机上运行Windows XP上的Apache / PHP,因此我选择为本地主机使用短名称 - 分别为't'和'a.t'。

session_set_cookie_params(
          24*3600, // 24 hours 
          '/',     // all paths
          '.t',    // 't' and all sub-domains
          FALSE,   // not secure
          FALSE    // not http-only
     ); 

session_start();

if ($_SERVER['HTTP_HOST'] == 't') 
    setcookie(
            'test',           // cookie name
            'yes',            // cookie value
            time() + 24*3600, // expires after 24 hours
            '/',              // all paths
            '.t',             // t and all subdomains
            FALSE,            // not secure
            FALSE             // not http-only
        );

echo $_SERVER['HTTP_HOST'] . '<br>';

print_r($_COOKIE);

这是我对root本地主机的所有内容:

t 
Array ( [PHPSESSID] => 23lhahncni8ekeqj3j02u7qlq5 [test] => yes )

和子域:

a.t 
Array ( )

正如您所看到的,子域的$ _COOKIE数组是空的,尽管浏览器可以看到相应的cookie(确切地说是Firebug - 我可以在选项卡中看到子域的页面打开的那两个cookie)。 我无法弄清楚为什么会这样。

我需要为两个域访问$ _COOKIE [test]。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要在setcookie()

的调用中指定域名
setcookie('test', 'yes', 0, '/', '.t');

session_set_cookie_params()仅设置用于保存$_SESSION的Cookie的选项,而不是使用setcookie设置的Cookie。