更新:看起来因为本地计算机托管而无效,特别是使用了短域名(如'.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]。我怎么能做到这一点?
答案 0 :(得分:1)
您需要在setcookie()
:
setcookie('test', 'yes', 0, '/', '.t');
session_set_cookie_params()
仅设置用于保存$_SESSION
的Cookie的选项,而不是使用setcookie
设置的Cookie。