在域上创建JavaScript cookie并跨子域读取它

时间:2011-04-15 01:14:24

标签: javascript cookies

以下是在用户计算机上写入12个月的JavaScript Cookie。

我们在example.com等主域上设置Cookie后,如果用户访问test.example.com这样的子域,我们需要继续在“test”子域中识别用户的活动

但是使用当前代码,只要他们离开www.example.com并访问test.example.com,他们就不会被标记为“HelloWorld”。

是否有人能够帮助我的代码允许跨子域读取cookie?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>

4 个答案:

答案 0 :(得分:187)

只需在Cookie上设置domainpath属性,例如:

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>

答案 1 :(得分:26)

你想:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

根据RFC 2109,要让所有子域都可以使用Cookie,您必须在域名前添加.

设置路径= /将使cookie在整个指定域中可用(又名.example.com)。

答案 2 :(得分:3)

这是一个有效的例子:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

这是一个通用解决方案,它从位置对象获取根域并设置cookie。逆转是因为你不知道你有多少个子域名。

答案 3 :(得分:1)

您也可以使用MDN JavaScript Cookie Framework并执行:

docCookies.setItem('HelloWorld', 'HelloWorld', myDate, '/', 'example.com');