【发布时间】:2013-05-21 15:01:06
【问题描述】:
更新:由于本地机器托管,特别是使用的短域名(如'.t'),它看起来不起作用。
具有实际(现实生活)域名使用情况的远程服务器上的相同代码可以正常工作。
有两个域(根域和它的子域)都在运行,查看同一个网络服务器的目录,因此,使用完全相同的脚本。 (我在家用计算机上的 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);
这是我为根本地主机所拥有的:
t
Array ( [PHPSESSID] => 23lhahncni8ekeqj3j02u7qlq5 [test] => yes )
对于子域:
a.t
Array ( )
如您所见,子域的 $_COOKIE 数组是空的,尽管浏览器可以看到相应的 cookie(确切地说是 Firebug - 我可以在打开子域页面的选项卡中看到这两个 cookie)。 我不知道为什么会这样。
我需要访问两个域的 $_COOKIE[test]。我怎样才能做到这一点?
【问题讨论】:
-
session_set_cookie_params仅为会话 cookie 设置选项,而不为使用setcookie()创建的 cookie 设置选项。 -
我感觉你不是第一个遇到这个问题的人,所以我想知道你为什么要提出一个关于这个话题的新问题。
-
@hakre,因为我没有找到适合我的答案。我尝试了一些其他代码(类似于之前在此处发布的),但仍然无法正常工作 - 请参阅顶部消息(我已编辑)。
-
@hakre,实际上你(或其他人)指出的重复的帖子必须处理不同的网络服务器,此外,还有一些 python 的东西。我有完全相同的脚本,没有不同的网络服务器(不是说我没有 python 或任何其他涉及的东西)。因此,虽然我在发布之前确实找到了它,但我什至不认为这对我有用。
-
@hakre,我认为对于任何具有适当 PHP 知识水平的人所引用的代码,整个问题都很清楚。我仍然坚持这个问题不是重复的,因为这个问题与本地机器托管和使用的人工域名有关(我在最近的编辑中引入了问题文本),这与任何问题都不匹配地点。话虽如此,我终于让它在我的一个远程环境中工作,我对此感到满意,所以我不会做任何进一步的研究并假设这个案例已经结束。 我现在声称的只是删除重复标签。
标签: php apache session cookies subdomain