Php 跨子域和主机的cookie

Php 跨子域和主机的cookie,php,django,apache,iis,cookies,Php,Django,Apache,Iis,Cookies,在我使用开发环境和语言编写的应用程序中,我需要从两个不同的子域访问cookie,每个子域位于单独的主机上 setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com'); 正在使用下面的PHP代码在www.mydomain.com上设置cookie,我正在尝试从另一台主机上的distance.mydomain.com访问cookie setcookie('token', bas

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

setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com');  
正在使用下面的PHP代码在
www.mydomain.com
上设置cookie,我正在尝试从另一台主机上的
distance.mydomain.com
访问cookie

setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com');  
我正在尝试使用以下代码从
distance.mydomain.com
访问cookie:

if (isset($_COOKIE['token'])) { /* do stuff */ }  
问题是:
distance.mydomain.com
找不到cookie。
刚才提到的
if
语句返回false,即使cookie存在

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

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

以防以下任何信息相关:
-
www.mydomain.com
is IIS 6.0
-
distance.mydomain.com
是Apache 2.2.9
-两台服务器都使用PHP5.2.x
-这两台服务器都在Windows Server 2003上运行


如果有任何进一步的信息,我可以提供,以便更好地描述问题,请让我知道

其中一个子域是否使用下划线?IE在接受来自不遵循URI RFC的子域的cookie时遇到问题

这是一个占位符,而不是实际的子域名,当然你使用IE。虽然更多的浏览器可能会受到as的影响,但Fireworks不会。php.net中关于-function:

服务器上的路径,cookie将在其中可用。如果设置为“/”,cookie将在整个域中可用。如果设置为“/foo/”,cookie将仅在/foo/目录和域的所有子目录(如/foo/bar/)中可用。默认值是设置cookie的当前目录

cookie可用的域。要使cookie在example.com的所有子域上都可用,您需要将其设置为“.example.com”。这个不是必需的,但使其与更多浏览器兼容。将其设置为www.example.com将使cookie仅在www子域中可用。有关详细信息,请参阅»规范中的尾部匹配

基本上:你的4。五,。需要检查参数:嗯,您的路径看起来不错,但域需要更改:


今天,您将cookie阻止到除域A之外的所有其他域,但您希望它对域A和B都可用。这有点棘手,但可以解决。获得灵感;-)

我会尝试安装并查看a)首先发送到Firefox的是什么头(设置cookie),b)从Firefox发送到第二台服务器的是什么头。至少通过这种方式,你可以缩小问题的范围(浏览器或服务器)。

为了方便阅读此问题的任何人,原始帖子中包含的代码和信息完全正确,工作正常

问题是当你引进其他技术时。例如,我后来了解到,通过Python模块发送PHP代码,允许Django为PHP文件/内容提供服务,这大大改变了脚本可访问和不可访问的内容。

这最终是根据的建议被发现的,他建议将
$\u COOKIE
发送到日志中,以找出其中的内容

我还签出了
$\u SERVER
$\u GET
。正是由于
$\u GET
的空白,我才知道我尝试使用的设置并不像我想象的那样简单。正是这种错误的理解导致了在最初的帖子中没有包含关于Django的信息

向所有回答此问题的人表示歉意和感谢

在域中设置Cookies

'.aaa.sub.domain.com'

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

'.sub.domain.com'

”.some.stupbly.undery.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”

对此表示抱歉;我仍然没有弄明白为什么我的文章的后半部分在我点击提交时没有通过。但是毫无疑问:)诅咒!你知道当你第二次写一篇文章/电子邮件/什么的时候,它从来没有第一次那么好吗?转到编辑实际域有一个连字符,但所有其他字符都是alpha。所讨论的子域完全是alpha。我可能错误地解释了您的回答,但根据文档,我的路径和域应该是正确的,正如我在原始问题中给出的那样。如果需要更正,请提供一个setcookie()函数调用的示例。看来我可能误解了。当你告诉我你使用两台不同的服务器时,我自然而然地想到了两台不同的主机。但是,如果cookie只需要在一台主机上可见,那么您的代码似乎是正确的:-/有用的工具!不过,我看了一眼,看到了请求remote.mydomain.com的标题