如何在 Javascript 中存储 http cookie

How do I store http cookies in Javascript

我想将 cookie 的子集存储在 Javascript(非 JQuery)等效的关联数组(我知道 Javascript 没有)中。在我熟悉的大多数语言中,这很简单,大致如下:-

cookiepart = cookieset.split('=');
cookie{cookiepart[0]} = cookiepart[1];

然后是一个简单的例子:-

print(cookie{'session'});

我能够实现任何目标的唯一方法是对密钥进行硬编码,即:-

print(cookie.session);

这将需要按照以下行使用 switch 语句:-

switch(cookiepart[0]) {
  case 'session':
    cookie.session = cookiepart[1];
    break;
  case 'cookie2':
    cookie.cookie2 = cookiepart[1];
    break;

等等,等等

填充我觉得特别不雅的数组。

有没有更好的方法?

多亏了@DigitalDrifter,这几乎可以正常工作了——但还不够。

实际的 cookie 是:-

redirect=1; sessionid=110430

我的代码是:-

let cookie = {};
let cookies = document.cookie.split(';');
cookies.forEach(c => {
        let [k, v] = c.split('=');
        Object.assign(cookie, {[k]: v});
});

alert("redirect : "+cookie.redirect);
alert("sessionid : "+cookie.sessionid);

cookie.redirect 工作正常并显示 1

但是

cookie.sessionid 显示未定义。为什么会这样?

我认为你最好在这里使用对象 {} 而不是数组。

let cookie = 'redirect=1; sessionid=110430';
let obj = {};

cookie.split(';').forEach(c => {
  let [k, v] = c.split('=').map(p => p.trim());
  Object.assign(obj, { [k]: v });
});


console.log(obj);

// outputs
// {
// "redirect": "1",
// "sessionid": "110430"
// }

console.log(obj.sessionid);

// outputs
// 110430

您可以使用 JSON,并且只是 parse/stringify。另外,我在下面使用本地存储。

我创建了两个函数,这样您就可以将它们重复用于您想要的任何存储。

function getStorage(key){
  str = localStorage.getItem(key) || "{}"
  return JSON.parse(str)
}

function setStorage(key, values){
   localStorage.setItem(key,JSON.stringify(values))
}

str = getStorage("session")

str["test"] = 1

setStorage("session", str)

sessions = getStorage("session")

console.log(sessions["test"])

所以,感谢@DigitalDrifter,对于任何发现这个问题的人,这就是我解析和保存 http cookies 的方式:-

let cookie = {};
let cookies = document.cookie.split(';');
cookies.forEach(c => {
        let [k, v] = c.split('=').map(p => p.trim());
        Object.assign(cookie, {[k]: v});
});