【问题标题】:php setcookie domainphp setcookie 域
【发布时间】:2011-01-18 02:32:39
【问题描述】:

一些不是我编写的应用程序,也不是用 PHP 编写的,它为域“www.domain.com”创建了一个 cookie。

我正在尝试替换该 cookie。所以在php中我做了:

setcookie('mycookie','mydata',time() + 2*7*24*60*60,'/','www.domain.com', false);

但是,生成的 cookie 是为域创建的:“.www.domain.com”,请注意点“.”领先于领域。

所以它不会替换它,它会创建另一个 cookie。 我能做什么?

【问题讨论】:

  • www.domain.com.www.domain.com 域(注意前导点)的处理方式相同,至少按照 RFC 6265,这是 每个 现代浏览器实现的。它表示前导点只是忽略。但是如果 cookie 没有成功地相互覆盖,这可能是由于属性“path”、“domain”、“secure”或“httpOnly”的不同,我们在这里看不到。一般来说,您可以尝试github.com/delight-im/PHP-Cookie 以更轻松地管理 cookie。

标签: php cookies setcookie


【解决方案1】:

这里也解决了这个问题: https://www.php.net/manual/en/function.setcookie.php

查看jah的评论:

如果要将 cookie 限制为单个主机,请将域参数提供为空字符串

您也可以尝试将.domain.com 作为域。尾随点将允许 domain.com 的所有子域的 cookie 并可能覆盖 www.-cookie,但我将首先使用上述解决方案。

【讨论】:

  • 我也在寻找这个问题的答案,果然,让域空白工作。谢谢。
  • 请注意,如果您对域使用空字符串,您可能会发现某些浏览器会感到困惑。如果可以,请使用 getenv('HTTP_HOST')
【解决方案2】:

如果你指定一个域,你应该遵循 RFC 2109 并在域前加上一个点;否则客户会这样做。但是如果你根本不指定域,客户端将获取请求的域。

【讨论】:

【解决方案3】:

这不是一个错误吗? 如果我希望我的 cookie 仅位于 www.example.com 而不是 something.www.example.com 怎么办?例如性能。 我应该能够指定 cookie 域而不是所有 [sub][sub] 子域的通配符。 更不用说它导致的错误数量,例如通过 php 设置 cookie 并尝试通过 JavaScript 删除它(这不会添加愚蠢的点)。

【讨论】:

    【解决方案4】:

    尝试创建几个具有相同名称但域不同的其他 cookie。示例:

    setcookie('mycookie','mydata1',time() + 2*7*24*60*60,'/','www.domain.com', false);
    setcookie('mycookie','mydata2',time() + 2*7*24*60*60,'/','www.domain.com', false);
    setcookie('mycookie_top','mydata1',time() + 2*7*24*60*60,'/','domain.com', false);
    setcookie('mycookie_top','mydata2',time() + 2*7*24*60*60,'/','domain.com', false);
    

    然后在 Firebug 中检查这些命令创建的 cookie。如果你一直得到一个双重cookie,那么这可能是PHP中的一个错误。另外,尝试在javascript代码中设置cookie,看看是否还有同样的问题。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 2013-04-10
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多