代码之家  ›  专栏  ›  技术社区  ›  Randy Hall

子域读取和删除主域cookie

  •  0
  • Randy Hall  · 技术社区  · 6 年前

    我需要从我的主域中设置一个cookie,读取然后从子域中删除该cookie。但我也需要在将来可能在域上再次设置cookie,然后在子域上读取它。基本上,是单向通信流。我不能让主域句柄取消设置cookie,因为用户访问主域和子域之间可能需要几个月的时间。

    我在我的域名上设置了一个cookie,如下所示:

    document.cookie = "mycookie=testcookie;domain=example.com;max-age=31536000;";
    

    我可以在另一个子域上访问它,例如:

    document.cookie.replace(/(?:(?:^|.*;\s*)testcookie\s*\=\s*([^;]*).*$)|^.*$/, "$1");
    

    document.cookie = "mycookie=;domain=example.com;max-age=0;";
    

    那不管用。Cookie仍然设置好。

    但是,这样设置会清除它:

    document.cookie = "mycookie=;domain=example.com;max-age=31536000;";
    

    它现在又回来了 "" 从子域请求时。

    但是。。。如果我返回到域并再次设置它,并且我可以看到它已经设置,子域仍然返回 ""

    有什么。。。我不知道饼干的等级?我不确定这是如何表现的,也不知道如何克服。

    1 回复  |  直到 6 年前
        1
  •  2
  •   forrestmid    6 年前

    为了实现这一点,您必须放置一个句点 . 在根域之前,如下所示: .example.com

    此外,在跨不同子域访问或修改cookie时,路径必须相同。最简单的方法就是使用域的根路径, / . 例如,如果将cookie设置为 sub1.example.com/page1 并尝试从 sub2.example.com/page2 .example.com网站 path=/ 以便从其他子域上的任何路径访问和修改它。

    最终:

    document.cookie = "mycookie=testcookie;domain=.example.com;path=/;max-age=31536000";
    

    将使您能够设置它并

    document.cookie = "mycookie=;domain=.example.com;path=/;max-age=0";