Javascript 如何正确更新cookie?

Javascript 如何正确更新cookie?,javascript,cookies,Javascript,Cookies,我正在通过下面创建的代码片段创建和设置cookie 当我试图抓取document.cookie以验证我的cookie是否正确创建时,我看到了一个差异 请允许我详细说明: 我使用的是一个50/50随机数生成器,由Math.floor(Math.random()*2)生成并存储在cookieValue中。因此,我确保我的cookie值始终为0或1。此参数以及其余参数将是cookieStr的一部分,它将被传递到document.cookie以创建cookie 但是,为了验证这是否正确发生,我需要确保当

我正在通过下面创建的代码片段创建和设置cookie

当我试图抓取
document.cookie
以验证我的cookie是否正确创建时,我看到了一个差异

请允许我详细说明:

我使用的是一个50/50随机数生成器,由
Math.floor(Math.random()*2)
生成并存储在
cookieValue
中。因此,我确保我的cookie值始终为0或1。此参数以及其余参数将是
cookieStr
的一部分,它将被传递到
document.cookie
以创建cookie

但是,为了验证这是否正确发生,我需要确保当前cookie
SomeCookieName
的值与我的
console.log(cookieStr)
的输出值相同。这意味着我正在正确地动态更新cookie

快速看一下下面的代码(在控制台中),我可以看出有些地方不对劲。它的
SomeCookieName
始终为0,其中作为随机数生成器将分别输出0和1

TL;博士

我认为我没有正确地更新
SomeCookieName
参数的值,该参数应该是
0
1
,基于
cookieValue
随机函数;但我不知道为什么会这样。我做错了什么

var hoursToAdd = 3,
    daysToAdd = 10,
    cookieValue = Math.floor(Math.random() * 2), // Random value 0 or 1
    cookieName = "SomeCookieName",
    cookiePath = "/",
    cookieDomain = "*.somedomainname.com";

setCookie(cookieName, cookieValue, 0, hoursToAdd, cookiePath, cookieDomain);

console.log(document.cookie);

function setCookie(c_name, c_value, c_exdays, c_exhours, c_path, c_domain) {
  var exdate = new Date(),
      cookieStr = "";

  // Setting up the cookie value
  cookieStr = c_name + "=" + escape(c_value) + "; ";

  // Determining the expiration date increase: days or hours
  if (c_exdays) { // Adds days to current date
    exdate.setDate(exdate.getDate() + (c_exdays));
  } 
  else if (c_exhours) { // Adds hours to current date
    exdate.setHours(exdate.getHours() + c_exhours);
  }

  // Setting up the cookie expiration date
  cookieStr += "expires=" + exdate.toUTCString() + "; ";
  
  // Setting up the cookie Path
  if (c_path) {
    cookieStr += "path=" + c_path + "; ";
  }

  // Setting up the cookie Domain
  if (c_domain) {
    cookieStr += "domain=" + c_domain + "; ";
  }
  
  console.log(cookieStr);

  // Creating the cookie 
  document.cookie = cookieStr;
}
编辑:添加控制台日志输出

我看到的控制台输出对我来说似乎不稳定。这是因为我希望
SomeCookieName
值每次都应该相同。注意有两个
console.log
查看上面的代码段,并尝试自己查看控制台输出:

SomeCookieName=0;expires=2016年1月29日星期五23:14:34 GMT;路径=/;domain=*.somedomainname.com

SomeCookieName=0_ga=GA1.2.988843064.1445444954;BCSI-CS-9cd60cd21b772d48=2

SomeCookieName=1;expires=2016年1月29日星期五23:14:35 GMT;路径=/;domain=*.somedomainname.com

SomeCookieName=0_ga=GA1.2.988843064.1445444954;BCSI-CS-9cd60cd21b772d48=2

SomeCookieName=1;expires=2016年1月29日星期五23:14:36 GMT;路径=/;domain=*.somedomainname.com

SomeCookieName=0_ga=GA1.2.988843064.1445444954;BCSI-CS-9cd60cd21b772d48=2

SomeCookieName=1;expires=2016年1月29日星期五23:15:02 GMT;路径=/;domain=*.somedomainname.com

SomeCookieName=0_ga=GA1.2.988843064.1445444954;BCSI-CS-9cd60cd21b772d48=2

SomeCookieName=1;expires=2016年1月29日星期五23:15:03 GMT;路径=/;domain=*.somedomainname.com

SomeCookieName=0_ga=GA1.2.988843064.1445444954;BCSI-CS-9cd60cd21b772d48=2


如果在设置
document.cookie
时包含
参数,则要读取该cookie,
必须与运行脚本的页面的域/子域匹配

在这种情况下,您可能会在测试时较早地对域设置
SomeCookieName=0
。然后,您试图更改它,但包含了无效的
,因此未设置cookie


如果您使
与您的实际域匹配,或者完全忽略它,则cookie将在您重置它时进行设置和更改。

对我有效:@mummercator您能详细说明一下吗?我查看控制台输出,发现
SomeCookieName
的值不同,每次都将其设置为0或1。您是否希望cookie值在第一次设置后仍保持不变?@Manufactor将其设置为0或1是正确的。我希望这样:创建值为0的cookie,控制台日志cookie应该显示值为0,如果创建cookie时值为1,则控制台日志应该显示cookie值为1。这有意义吗?我认为我没有正确更新cookie值,因为它没有向我显示所描述的行为。。。否则我就误解了某些东西,我看不出它是什么is@Fabricator您的小提琴对我不起作用,因为域不正确--我根本看不到设置了
SomeCookieName
。(它真的对你有用吗?或者我完全误解了这里的目标是什么?)我修改了这个域,所以就我所能理解的目标而言,它确实有效:(OP:这是你期望的行为吗?)谢谢!我不知道会发生这种情况,特别是因为没有抛出无效参数的错误,即无效域