首页 > 解决方案 > 一次设置多个cookie的功能不起作用

问题描述

我想设置cookies。我有一个数组和一个函数 setCookies。在这个函数中,我遍历 myCookies 数组,经过一些操作后得到一个字符串。该字符串应该设置 cookie。

 const myCookies = 
  [
    {budgetMonth: someValue1},
    {budgetDay: someValue2},
    {expensesMonth: someValue3}
  ];

    function setCookies(myCookies) {
        let arr = [];
        for(let i of Object.keys(myCookies)) {
           let myItems = myCookies[i];

           for(let y of Object.keys(myItems)) {
              arr.push('document.cookie '  + '= "' + y + '=' + myItems[y] + "\"");                                                  
           }
        } 

     let stri = '';
            arr.forEach(item => {
                stri += item + ';'        
    });  

    return stri;          
}

setCookies(myCookies);

当我记录 stri 时,我看到下面列出的字符串。这不是设置cookie的正确方法吗?我想是的,但为什么它不起作用?当我输入我的代码 document.cookie = "budgetMonth=someValue1" 时,cookie 就设置好了。

document.cookie = "budgetMonth=someValue1";
document.cookie = "budgetDay=someValue2";
document.cookie = "expensesMonth=someValue3";

标签: javascriptloopscookies

解决方案


您的代码有几个问题。

  1. 您存储 cookie 值的结构不一定不正确,但将其编写为myCookies = {name1: value1, name2: value2}简化代码,间接验证您是否没有多次设置相同的 cookie 名称(除非您真的想这样做,设置多个路径,例如相同的键),并允许您稍后在代码中以更简化的方式从列表中添加/删除 cookie;

  2. 您正在生成一个数组,并使用该数组生成一个字符串,但您没有对它们中的任何一个做任何事情。要实际设置 cookie,您必须执行代码 document.cookie = something。

您的代码(未经测试)的一个非常简化的版本将类似于:

const myCookies = {
  budgetMonth: someValue1,
  budgetDay: someValue2,
  expensesMonth: someValue3
};
function setCookies(myCookies) {
  for(let k of Object.keys(myCookies)) {
    document.cookie = k + "=" + myCookies[k];
  }
}
setCookies(myCookies);

推荐阅读