如何将 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 中比字符串更安全或更好?

内置对象Session,Cookie

如何从对象数组中获取特定数据并存储在js(vue js)中的新数组中

05-21内置对象Session,Cookie

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?