在我编写的应用程序中,使用多种开发环境和语言的组合时,我需要从两个不同的子域访问cookie,每个子域位于单独的主机上。
使用以下PHP代码将cookie设置在www.mydomain.com
上,并尝试从单独的主机distant.mydomain.com
访问它。
setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com');
我正尝试使用以下代码访问来自distant.mydomain.com
的cookie:
if (isset($_COOKIE['token'])) { /* do stuff */ }
问题: distant.mydomain.com
找不到 cookie。即使 cookie 存在,刚刚提到的 if
语句返回 false。
我已经验证设置的 cookie 是针对 mydomain.com
的(通过检查我的 Firefox cookie)。我想不出任何理由它为什么不能工作。
使用相同的 setcookie
代码,我有一个旧应用程序,专门在 www.mydomain.com
主机上运行,该应用程序能够跨域访问 cookie。这让我怀疑问题与不同的主机有关。
如果以下任何信息相关,请告诉我:
- www.mydomain.com
是 IIS 6.0
- distant.mydomain.com
是 Apache 2.2.9
- 两个服务器都使用 PHP 5.2.x
- 两个服务器都在 Windows Server 2003 上运行
如果需要提供更多信息以更好地描述问题,请告诉我!