使用php设置子域的cookie将不起作用

时间:2012-01-31 15:20:54

标签: php cookies

我正在尝试从“example.com”设置一个cookie,以便只能访问“site.example.com”。问题是,由于某种原因,这不起作用。 例如,下面的代码可以正常工作:

setcookie('my_var', "hello", time()+3600, "/", 'example.com');

也就是说,当从example.com运行时,我可以从site.example.com看到'my_var'cookie。但是,下面的代码不会设置cookie:

setcookie('my_var', "hello", time()+3600, "/", 'site.example.com');

(如果我在前面添加一个点,例如“.site.example.com”)

使用php 5.3.8和chrome

2 个答案:

答案 0 :(得分:2)

正如Gumbo在评论中指出的那样,您无法为子域设置cookie,仅针对相同或超级域,请参阅Domain set cookie for subdomain

答案 1 :(得分:0)

以我为例,我试图从sd1.example.com 设置cookie,以便在example.com,www.example.com,sd2.example.com等上工作。

我尝试更改php.ini中的某些设置,显式列出所有子域,但没有一个起作用。我意识到只有根域可以在其他子域上设置cookie,而一个子域不能在另一个子域上设置cookie。

因此,我在根域(即 example.com

)上创建了脚本 setcookie.php

sd1.example.com向此脚本发送GET请求:

header("Location: //example.com/setcookie.php?value=" . $xxxxx);

并在 setcookie.php

setcookie("xxxxx", $_GET['value'], 0, "/", ".example.com");

通过这种方式,默认情况下可以从所有子域访问cookie。