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

在域上创建JavaScript cookie并跨子域读取它,javascript,cookies,Javascript,Cookies,下面是一个JavaScript cookie,在用户的计算机上写了12个月 在主域(如example.com)上设置cookie后,如果用户访问子域(如test.example.com),我们需要继续识别用户在“test”子域中的活动 但在当前代码中,一旦他们离开www.example.com并访问test.example.com,他们就不再被标记为“HelloWorld” 是否有人能够帮助我的代码允许跨子域读取cookie <script type="text/javascript"&g

下面是一个JavaScript cookie,在用户的计算机上写了12个月

在主域(如
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>

var cookieName='HelloWorld';
var cookieValue='HelloWorld';
var myDate=新日期();
myDate.setMonth(myDate.getMonth()+12);
document.cookie=cookieName+“=”+cookieValue+“expires=“+myDate;
您需要:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;
根据,要使cookie可用于所有子域,必须在域前面放置一个


设置path=/将使cookie在整个指定域内可用(aka
.example.com

只需在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 
                  + ";domain=.example.com;path=/";
</script>

var cookieName='HelloWorld';
var cookieValue='HelloWorld';
var myDate=新日期();
myDate.setMonth(myDate.getMonth()+12);
document.cookie=cookieName+“=”+cookieValue+“expires=“+myDate
+“domain=.example.com;path=/”;

以下是一个工作示例:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"
这是一个通用解决方案,它从location对象获取根域并设置cookie。之所以要反转,是因为您不知道有多少子域(如果有的话)。

您也可以使用and do:


FWIW-我认为您需要删除“path=expires=”条目并将其设置为“expires=”。根据较新版本,不再需要在域前面包含
。我正在尝试在localhost中执行此操作,无法更改path@Enve-浏览器对本地主机cookie的处理与其他cookie稍有不同。或者更确切地说,他们对待所有cookie的方式使得使用localhost变得困难。例如,请参见。我建议编辑您的
hosts
文件,并将类似
myserver.local
的别名设置为
127.0.0.1
。然后,您可以使用它访问本地服务器(以及设置cookie时),希望一切正常。您创建和检索的所有cookie值都必须是字符串值。字符串可能包含在尝试检索时可能会破坏本地存储的字符。我建议对cookie名称和值使用全局
encodeURI()
&
decodeURI()
方法来处理需要进行的任何转换。i、 例如,
document.cookie=encodeURI(cookieName)+“=”+encodeURI(cookieValue)
。如果服务器端代码是用C#编写的,Rick Strahl提供了一种获取基本域的方法,例如example.com,不幸的是,从位于
sub.example.com
的域中,无法使用Javascript为
.example.com
设置cookie。如果存在域扩展的二级层次结构,例如.co.in,则此操作将不起作用。链接已断开。看起来文档已移动。谢谢你的提醒,编辑你的生活!
browser.cookies.set({
  url: 'example.com',
  name: 'HelloWorld',
  value: 'HelloWorld',
  expirationDate: myDate
}