【问题标题】:PHP cookie writes on incorrect domainPHP cookie 写入不正确的域
【发布时间】:2011-03-12 12:02:02
【问题描述】:

我有一个在我的应用程序中使用的 cookie。它看起来像这样:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
+-------+-------+-----------------------+-------+----------+

在我的脚本的一部分中,基于某些条件,我试图更改 cookie 的值。我正在使用此代码:

// overwrite cookie
if($condition){
  setcookie("foo", "cat", 0, "/", "my.domain.tld");
}

之后,我的 cookie 数据如下所示:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
| foo   | cat   | .my.domain.tld        | /     | Session  |
+-------+-------+-----------------------+-------+----------+

. 怎么会被添加到域中?我想覆盖现有的 cookie。

【问题讨论】:

  • 没有意义,它必须设置为anything.domain.tld 否则某处有一个大错误-我唯一敢建议的是,您再次检查并确保第一个 cookie 实际上没有设置为 .anything 而不是第二个 ..
  • Nathan,看起来这不是一个错误,因为它可能是一个常见的混淆源。请参阅下面的答案:)
  • 您可能会发现$cookie->setDomain($domain) 很有帮助,如this standalone library 中所示。它负责规范您提供的域名。

标签: php cookies setcookie


【解决方案1】:

http://www.php.net/manual/en/function.setcookie.php#93641

答案在 php 手册的帖子中讨论。

Cookie 数据由浏览器代理设置,因此根据浏览器使用的进程进行不同的处理。

【讨论】:

    【解决方案2】:

    来自文档:

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

    尾部匹配规范在这里:

    http://curl.haxx.se/rfc/cookie_spec.html

    【讨论】:

    • 我应该更具体。 anything 我的意思是子域可以是任何东西。我不想将答案缩小到www 特定的子域。更准确地说,我不希望 cookie 匹配域的 all 子域。我更新了我的问题。
    【解决方案3】:

    事实证明,不指定域似乎可行:

    setcookie("foo", "cat", 0, "/");
    

    预期的 cookie 数据:

    +-------+-------+-----------------------+-------+----------+
    | Name  | Value | Domain                | Path  | Expires  |
    +-------+-------+-----------------------+-------+----------+
    | foo   | cat   | my.domain.tld         | /     | Session  |
    +-------+-------+-----------------------+-------+----------+
    

    奇怪,但它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 2015-09-10
      • 1970-01-01
      • 2014-12-21
      • 2011-04-11
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多