使用JavaScript设置跨子域Cookie

35

我应该如何为这些函数添加域名支持? 我想实现将 .example.com 声明为域名,以便可以在 example.com 的所有子域中读取 cookies。由于当前未设置域,因此仅可以从 www.example.com 读取。

2个回答

75

以下是如何在域名间共享 cookies 的链接:

https://www.thoughtco.com/javascript-by-example-2037272

它涉及将 Cookie 字符串的 domain 属性设置为:

document.cookie = "myValue=5;path=/;domain=example.com";

这个cookie现在应该可以被example.com的所有子域名访问,例如login.example.com


ppk的函数语法似乎有所不同,因为它从其上面的行中获取名称和到期时间:document.cookie = name+"="+value+expires+"; path=/"; 那这些双引号呢? - newnomad
1
@newnomad:JavaScript像大多数编程语言一样,在字符串字面量周围使用引号。 - RoToRa
1
如果我不使用escape(),则无法将此内容添加到cookie中。但是,如果使用escape,则可以设置路径和域的值。 - user2171669
1
我遇到了类似的问题,虽然在域名前加了一个前导点(为了让它对另一个子域可用),但直到我添加了path=/部分才显示出来。 - Eli
2
链接没有解释任何东西。 - user31782

2
在我的情况下,我们需要设置一个可以在我们的.com子域名之间使用的cookie:

最初的回答

function setCrossSubdomainCookie(name, value, days) {
  const assign = name + "=" + escape(value) + ";";
  const d = new Date();
  d.setTime(d.getTime() + (days*24*60*60*1000));
  const expires = "expires="+ d.toUTCString() + ";";
  const path = "path=/;";
  const domain = "domain=" + (document.domain.match(/[^\.]*\.[^.]*$/)[0]) + ";";
  document.cookie = assign + expires + path + domain;
}

这可能对.co.uk等网站不起作用,但可以使用相同的原则。"最初的回答"

1
我该如何修改代码以支持 .co.uk 域名?假设这需要更改一些正则表达式。 - Kieran Crown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接