使用PHP/Nginx将cookie域从无域迁移到.mydomain.com

使用PHP/Nginx将cookie域从无域迁移到.mydomain.com,php,cookies,nginx,cross-domain,Php,Cookies,Nginx,Cross Domain,我有一个用PHP编写并在Nginx HTTP服务器上运行的网站。我有一个名为“locale”的cookie,它表示用户的区域设置。6个月来,我一直在发送这样的cookie: setCookie("locale", "fr", time() + 36000, "/"); setCookie("locale", "fr", time() + 36000, "/", ".mydomain.com"); 作为一个没有cookie的域,我知道它只在我的单个域“www.mydomain.com”上可用

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

setCookie("locale", "fr", time() + 36000, "/");
setCookie("locale", "fr", time() + 36000, "/", ".mydomain.com");
作为一个没有cookie的域,我知道它只在我的单个域“www.mydomain.com”上可用

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

  • m、 mydomain.com(移动部分)
  • secure.mydomain.com(安全版本)
  • 我看到www上设置的“locale”cookie无法被m或secure访问。现在我发送的cookie如下所示:

    setCookie("locale", "fr", time() + 36000, "/");
    
    setCookie("locale", "fr", time() + 36000, "/", ".mydomain.com");
    
    是的,我的饼干现在到处都有!但由于我有一些用户已经浏览过我的网站,他们有无域cookie+新cookie,他们的浏览器向我发送两个cookie,但PHP向我发送了前一个cookie。因此,没有人可以再更改区域设置


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

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


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

    setCookie('locale', null, time() - 5000, '/');
    
    以删除无域cookie。我已经在所有主流浏览器上进行了测试,没有发现与以下内容有任何冲突:

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

    您认为只有在无域cookie存在时才可以删除它吗?您可以做什么?覆盖www.mydomain.com cookie并将其设置为过去某个时间,使其过期顺便说一句,无域cookie!==www.mydomain.com上的cookie。因此,要删除无域cookie,必须让domain参数为空。