2014-02-27 161 views
0

我有两个相同名称的cookie - 一个在我的根域,一个在子域上。默认情况下,如果您位于匹配的子域中,PHP将读取子域cookie并忽略根cookie。如果有一个匹配的子域cookie,我将如何阅读根域cookie?如何在当前子域名具有相同名称的cookie时访问根域上设置的cookie?

例如,可以说我有这两种饼干:

Name | Value | Domain 
uid | 12345 | .example.com 
uid | abcde | app.example.com 

如果我在app.example.com,PHP将只显示我这个$_COOKIE全局阵列中:

array("uid" => "abcde"); 

不过,我希望能够访问此:

array("uid" => "12345"); 

这可能吗?

我使用session_set_cookie_params这样的尝试:

session_set_cookie_params(0, "/", ".example.com"); 
session_start(); 
echo "<pre>"; print_r($_COOKIE["uid"]); echo "</pre>"; 

但它仍然会返回:

array("uid" => "abcde"); 

编辑:

的饼干被设定为以下代码:

setcookie("uid", "12345", 0, "/", "example.com"); 
setcookie("uid", "abcde", 0, "/", "app.example.com"); 
+0

对于会话,http://stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains其他的cookie,你需要指定域像你正在做的,但使用setCookie方法。 –

+0

据我所知,浏览器只发送其中一个cookie,所以PHP甚至不知道另一个。浏览器基本上检查是否没有具有相同名称的cookie。如果有的话,它会发送具有最适合该域的特定域值的域(比如app.example.com它“'app.example.com”'比'“.example.com”更具体反过来会比'“example.com”'更具体)' – Tularis

+0

@JonathanKuhn - 指定域没有做任何事情......如果您在该子域中,它总是会显示来自子域的cookie。 –

回答

0

如果您在可供其他子域访问的根域中创建cookie,并且您不对此子域使用此cookie,则建议您重命名该子域的cookie。