如何将 JS 对象存储在 cookie 中
Posted
技术标签:
【中文标题】如何将 JS 对象存储在 cookie 中【英文标题】:How to store JS Object in cookie 【发布时间】:2014-02-03 01:39:05 【问题描述】:给定一个对象:
var object =
"key1" : Math.random()*10000000000000000,
"key2" : "value",
"key3" : "value",
当有人填写具有相应值的表单时,我如何将其存储在浏览器 cookie 中?当用户返回页面填写表单时,值应从 cookie 填充表单。
【问题讨论】:
JSON.stringify()
/JSON.parse()
Pure javascript - store object in cookie 的可能重复项
和can we assign object into cookie in javascript?
我使用var formCookie = JSON.stringify(object);
得到一个JSON对象,所以问题是如何将它存储到cookie中,然后检索它并解析。
JSON.stringify()
给你一个 json string。没有“json 对象”这样的东西。由于您现在有一个字符串,因此将值存储在 cookie 中应该是微不足道的。您最喜欢的搜索引擎应该能够将您引导至数百个示例。
【参考方案1】:
扩展已经给出的答案(cmets 和自定义 JS 方法)......我想把它放在一个工作示例中......所以这里......
首先,使用 JSON 可以让您轻松地将对象与 JSON 相互转换,而无需使用自己的方法。这是当今最常见的方法和众所周知的标准。所以大多数语言都支持对于 JSON..
扩展subas chandran提供的示例...
var object=name : username.value, email : email.value, gender : gender.value;
var stringObj=JSON.stringify(object);
在这里看到http://jsfiddle.net/LLujbb2h/ 使其易于使用,如果您想处理字符串/数组和对象,则不受限制。您只需将主要对象交给它,它就会为您完成所有工作......那么为什么要重新发明***呢??
使用此处显示的非 JSON 方法http://jsfiddle.net/1bf4dg8o/ 有很多问题,例如从 cookie 中读回对象后处理对象.. 它只是一个字符串...如果说例如你把 :: in你的名字/电子邮件/性别..这会破坏自定义语法......我会不惜一切代价避免这种方法!
简单地,测试我创建的第一个小提琴,你会发现它更容易处理......
还可以使用浏览器上的检查器查看 cookie,因为这将有助于调试..
EDIT - 展示如何将 cookie 读回 JS 对象 http://jsfiddle.net/LLujbb2h/2/
【讨论】:
【参考方案2】:将您的对象/数组转换为 json 字符串。 你可以像这样设置cookie:
var object =
"key1" : Math.random()*10000000000000000,
"key2" : "value",
"key3" : "value",
let objectString = JSON.stringify(object);
document.cookie = "myobject=" + objectString + "; expires="+ (new Date()).toDateString();
上述 cookie 今天到期。您可以将其他可选值设置为all。
要检索之前设置的 cookie:
let cookies = document.cookie;
console.log(cookies);
【讨论】:
【参考方案3】:var saveButton=document.getElementById("save");
var username=document.getElementById("Name");
var email=document.getElementById("Email");
var gender=document.getElementById("Gender");
function setCookie(value, exdays)
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = "Username"+ "=" + value + "; " + expires;
if(document.cookie)
return true;
function objToString (obj)
var str = '';
for (var p in obj)
if (obj.hasOwnProperty(p))
str += p + '::' + obj[p] + '\n';
return str;
saveButton.onclick=function ()
// body...
var object=name : username.value, email : email.value, gender : gender.value;
var stringObj=objToString(object);
alert(stringObj);
if(setCookie(stringObj,1))
alert("cookie set");
;
【讨论】:
一个简单任务的复杂方法,认为你可能混淆了 OP 而不是帮助.. 只需要一个 JSON 字符串...... 很抱歉,我在这里看到了一些问题,因此不得不投反对票,首先,上面的代码不能直接工作。你需要删除换行符。其次,对于名称/电子邮件或任何字符串。如果不使用正则表达式类型表达式,这将不容易转换回对象。另外,如果我只是将 :: 添加到字符串中,这会破坏脚本更进一步.. 我只对此发表评论,因为谷歌寻找答案的人应该有最好的方向来节省他们的时间。以上是关于如何将 JS 对象存储在 cookie 中的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS:将对象存储在 cookie 中,给出 [Object Object] 的结果
为啥将 JSON 对象存储在 cookie 中比字符串更安全或更好?