【问题标题】:Migrate cookie domain from no domain to .mydomain.com with PHP/Nginx使用 PHP/Nginx 将 cookie 域从无域迁移到 .mydomain.com
【发布时间】:2014-11-09 06:54:09
【问题描述】:

我有一个用 PHP 编写并在 Nginx HTTP 服务器上运行的网站。我有一个名为“locale”的 cookie,它代表用户区域设置。 6 个月以来,我发送的 cookie 是这样的:

setCookie("locale", "fr", time() + 36000, "/");

作为一个没有 cookie 的域,我知道它只在我的单个域“www.mydomain.com”上可用。

但现在,我想创建 2 个新闻子域:

  1. m.mydomain.com(移动端)
  2. secure.mydomain.com(安全版本)

我看到 www 上设置的“区域设置”cookie 无法被 m 或安全访问。所以现在我像这样发送cookie:

setCookie("locale", "fr", time() + 36000, "/", ".mydomain.com");

是的,我的 cookie 现在随处可见!但是由于我有一些用户已经浏览过我的网站,他们有域少的 cookie + 新的,他们的浏览器向我发送了两个 cookie,但 PHP 给了我前一个。因此,没有人可以再更改语言环境了。

问题是:如何从这个无域 cookie 迁移到域指定 cookie?无需更改 cookie 名称。

【问题讨论】:

    标签: php cookies nginx cross-domain


    【解决方案1】:

    作为结论,我将在 1 周内将其放入我的 index.php 文件中:

    setCookie('locale', null, time() - 5000, '/');
    

    为了删除无域 cookie。我已经在所有主流浏览器上进行了测试,我没有发现任何冲突:

    setCookie('locale', 'fr', time() + 36000, '/', '.mydomain.com');
    

    【讨论】:

      【解决方案2】:

      您设置的第一个没有域的 cookie 默认为 www.mydomain.com,因为它比“.mydomain.com”更具体,所以它选择了原始 cookie。在此处阅读接受的答案。

      How to get the domain of a specific cookie?

      【讨论】:

      • 你认为只有在没有域的 cookie 存在的情况下才可以删除它吗?
      • 你可以做什么覆盖 www.mydomain.com cookie 并将其设置为过去的某个时间以便它过期
      • 顺便说一句,无域 cookie !=== www.mydomain.com 上的 cookie。所以要删除一个没有域的cookie,你必须让域参数为空。
      猜你喜欢
      • 2015-06-13
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2011-06-16
      相关资源
      最近更新 更多