如何在 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});
});
我想将 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});
});