跨子域和主机的 Cookie

2022-08-31 01:10:22

在我使用开发环境和语言组合编写的应用程序中,我需要从两个不同的子域访问cookie,每个子域都在单独的主机上。

Cookie正在使用下面的PHP代码进行设置,我正在尝试从单独的主机上访问它。www.mydomain.comdistant.mydomain.com

setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com');  

我正在尝试使用以下代码访问 Cookie:distant.mydomain.com

if (isset($_COOKIE['token'])) { /* do stuff */ }  

问题:distant.mydomain.com 找不到 cookie。刚才提到的语句返回 false,即使 Cookie 存在也是如此。if

我已经验证了设置的cookie是用于(通过检查我的Firefox Cookie)。我想不出任何理由这不起作用。mydomain.com

使用相同的代码,我有一个在主机上专门运行的旧应用程序,并且该应用程序能够跨域访问cookie。这使我怀疑问题与单独的主机有关。setcookiewww.mydomain.com

以防以下任何信息是相关的:
- IIS 6.0
- Apache 2.2.9
- 两个服务器都使用PHP 5.2.x
- 两个服务器都在Windows Server 2003上运行www.mydomain.comdistant.mydomain.com

如果为了更好地描述问题,我可以提供任何进一步的信息,请告诉我!


答案 1

为了任何阅读此问题的人的利益,原始帖子中包含的代码和信息是完全正确的,并且可以正常工作。

问题是当你引入其他技术时。例如,我了解到通过Python模块发送PHP代码,该模块允许Django提供PHP文件/内容,这极大地改变了脚本可以访问的内容和无法访问的内容。

这最终是在Marc Novakowski的建议下发现的,他建议发送到日志中以找出那里有什么。$_COOKIE

我也退房了。正是空虚让我意识到,我试图使用的设置并不像我想象的那么简单。正是这种错误的理解导致没有在原始帖子中包含有关Django的信息。$_SERVER$_GET$_GET

道歉感谢所有回答这个问题的人!


答案 2

在域中设置的 Cookie

'.aaa.sub.domain.com'

将与域中设置的同名 Cookie 发生冲突

'.sub.domain.com'

'.some.stupidly.obscure.multi.sub.domain.com'

这意味着(这需要一些时间才能通过)如果您要在多个域中使用同名cookie,则必须在主/基域中设置一次(并且仅一次),在本例中为“.domain.com”;否则,生成的 cookie 将不确定且随机返回到达,有时在 .a.sub.domain.com 中设置 cookie “jasper”,有时在 .sub.domain.com 中设置 cookie 'jasper',有时在 .b.c.d.domain.com 中设置 cookie 'jasper',有时在 '.sub.domain.com' 中设置 cookie 'jasper' ,有时在 '.domain.com' 中设置 cookie 'jasper'


推荐