我用Javascript设置的一个cookie总是出现空值。其余的读得很好

问题描述 投票:0回答:1

链接到要测试的代码:https://jsbin.com/modocelume/edit?js,console

我的一个饼干总是空着。其余的读得很好。在实际应用中,它意味着读取URL参数。在那种情况下,我实际上可以改变哪一个为空,但它总是至少一个!

我可以看到cookie是在开发人员工具中设置的,它不是HTTP Only,并且到期很好。

有人对此有经验吗?

var urlParams = [
  'utm_source', 
  'utm_medium', 
  'utm_campaign', 
  'utm_term', 
  'utm_content'
];

function createCookie(name, value, days, domain) {

  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days*24*60*60*1000));
    var expires = '; expires=' + date.toGMTString();
  } else {
    var expires = '';
  }

  if (domain) {
    var domain = '; domain=' + domain;
  }

  document.cookie = name + '=' + value + expires + domain + '; path=/';
}

function readCookie(name) {

  var name = name + '=',
      fields = document.cookie.split(';');

  for(var i=0; i < fields.length; i++) {

    var field = fields[i];

    while (field.charAt(0)==' ') {

      field = field.substring(1, field.length);

      if (field.indexOf(name) == 0) {

        return field.substring(name.length, field.length);
      }
    }
  }
  return null;
}

urlParams.forEach(function(param) {

  createCookie(param, param, 365, '');
});

urlParams.forEach(function(param) {

  console.log(readCookie(param));
});

我预计readCookie('utm_source')的输出为utm_source,但输出为null

谢谢你的帮助!

javascript
1个回答
0
投票

出于某种原因,你的utm_source字段名称前面没有空格,所以你的while (field.charAt(0) === ' ')没有为它开火。我将其更改为以下代码,现在似乎工作正常:

function readCookie(name) {

  var name = name + '=',
      fields = document.cookie.split(';');

  for(var i=0; i < fields.length; i++) {

    var field = fields[i].trim();

    if (field.indexOf(name) == 0) {

       return field.substring(name.length, field.length);
    }

  }
  return null;
}
© www.soinside.com 2019 - 2024. All rights reserved.