【问题标题】:Setting cookie for subdomain with php won't work用 php 为子域设置 cookie 不起作用
【发布时间】:2012-02-23 07:39:36
【问题描述】:

我正在尝试从“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 和铬

【问题讨论】:

  • 如果您检查请求中的标头,您可能会发现正在发送 cookie 标头,但您的浏览器忽略了它
  • 您不能为子域设置cookie,只能为同域或超级域设置cookie。
  • @gumbo:你的意思是我可以从 site.example.com 设置一个 cookie 来访问 example.com,但不能以其他方式访问?
  • @periklis 是的,完全正确。另请参阅stackoverflow.com/a/5258477/53114
  • @periklis 我已经发布了一个指向相应 RFC 的链接并更新了帖子只是为了符合最近的 RFC 更新。

标签: php cookies


【解决方案1】:

正如 Gumbo 在他的评论中指出的那样,您不能为子域设置 cookie,只能为相同或超级域设置 cookie,请参阅Domain set cookie for subdomain

【讨论】:

    【解决方案2】:

    在我的例子中,我试图设置一个 来自 sd1.example.com 的 cookie 以在 example.com、www.example.com、sd2.example.com 等上工作。

    我尝试更改 php.ini 中的一些设置,明确列出所有子域,但没有任何效果。我意识到只有根域可以在其他子域上设置 cookie,而一个子域不能在另一个子域上设置 cookie。

    所以我在根域上做了一个脚本setcookie.php,即example.com

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

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

    而在 setcookie.php

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

    这样cookie可以默认从所有子域访问。

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2023-04-10
      • 2018-04-03
      • 2012-05-31
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多