【问题标题】:Set cookie with array() in jquery在 jquery 中使用 array() 设置 cookie
【发布时间】:2020-08-17 00:11:51
【问题描述】:

我希望能够检查是否设置了 cookie (id):如果未设置,则创建它。如果设置,则检索值(= 数组)。如何从 cookie 中检索数组? 我听说我必须使用 JSON,但我不确定如何使用以下代码?

function start(id){
 if (document.cookie.indexOf('id') === -1 ) {
     setCookie('id', id, 7);
    } 
 else {
    var playedID = [GET COOKIE ARRAY]
    playedID.push(id); 
    setCookie('id',playedID);
  } 
}

【问题讨论】:

  • 坦率地说,我没有弄清楚你到底想做什么以及你的问题是什么!
  • 没有得到代码push.playedID(id); 的作用?你能解释一下吗?
  • ok 所以playedID 应该是一个数组(保存在cookie 中的ID 数组)并推送。是个错误,我更正了,应该是playID.push()为了给数组添加一个新的id。

标签: javascript


【解决方案1】:
  1. 首先,cookie 不是存储为数组而是字符串:如果您在控制台中输入document.cookie,您将获得您正在访问的网站的所有 cookie,以逗号分隔。

如此处所述:https://www.w3schools.com/js/js_cookies.asp, 您必须创建一个自定义函数来访问您需要的 cookie。

  1. 那么你的cookie的值仍然是一个字符串,所以如果你想保存一个id数组,你必须使用JSON.stringify将你的数组编码为字符串:I want to store Javascript array as a Cookie

然后您可以创建它或更新它的值:


function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function setCookie(cname, cvalue) {
  document.cookie = cname + "=" + cvalue + ";";
}

function start(id){
 if (getCookie('id') === '' ) {
     setCookie('id', JSON.stringify([+id]));
    }
 else {
    let ids = JSON.parse(getCookie('id'))
    console.log(ids)
    ids.push(+id); 
    setCookie('id', JSON.stringify(ids));
  } 
}

function sendID(id) {
  console.log(document.getElementById("user-id").value)
  start(id);
  alert(getCookie("id"))
}

这是一个工作示例:https://codepen.io/adrientiburce/pen/ExVbYWy?editors=1010

【讨论】:

    【解决方案2】:

    这是一种基于一些辅助函数的方法,可确保您正确解析和字符串化 cookie。

    getCookie 和 setCookie 来自https://www.w3schools.com/js/js_cookies.asp

    // This won't run due to security policies on this site, but you can run it in the dev tools and see.
    
    function getCookie(cname) {
      var name = cname + "=";
      var decodedCookie = decodeURIComponent(document.cookie);
      var ca = decodedCookie.split(';');
      for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
          c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
          return c.substring(name.length, c.length);
        }
      }
      return "";
    }
    
    function setCookie(cname, cvalue, exdays) {
      var d = new Date();
      d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
      var expires = "expires=" + d.toUTCString();
      document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }
    
    function getCookieArray(cname) {
      var cookie = getCookie(cname);
      return cookie ? JSON.parse(cookie) : [];
    }
    
    function pushToCookieArray(cname, cvalue, exdays) {
      var cookieArray = getCookieArray(cname);
      cookieArray.push(cvalue);
      setCookie(cname, JSON.stringify(cookieArray), exdays);
    }
    
    function start(id) {
      pushToCookieArray('id', id, 7);
      console.log(getCookieArray('id'));
    }
    
    start(5);
    start(6);
    start(8);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2012-03-26
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多