将对象存入Cookie

5

我正在使用jQuery开发客户端Web应用程序。

我想要存储所有访问过的页面,因此我使用cookie来实现。

所以,我需要存储两个元素:

  • 页面URL
  • 页面标题

我开始创建cookie中的数据:

Index.html:

if(!$.cookie("history")){
        var url_history = document.location;
        var title_history = $("html title").text();
        $.cookie("historyURL", url_history);
        $.cookie("historyTITLE", title_history);
    }

另一个页面.html:

var url_history = document.location;
var title_history = $("html title").text();
$.cookie("historyURL", url_history);
$.cookie("historyTITLE", title_history);

问题在于cookie的新值会覆盖旧值。
我认为应该设置一个对象,而不是字符串,例如:
var objHistory = [];
objHistory.push({url:document.location, title: $("html title").text()})
$.cookie("history", objHistory);

现在我有另一个问题:

我无法从 cookie 中检索到我的对象

当我尝试从 cookie 获取我的对象时,它显示一个字符串 "object" 而非对象

能否在 cookie 中设置对象?

谢谢你的帮助


Cookie的值始终为字符串。 - T.J. Crowder
请在你的投票下方添加评论。我不关心声望,我关心协作和知识共享。因此,请解释和评论。 - Alberto De Caro
4个回答

5

您可以将对象转换为JSON字符串:

var jsonHistory = JSON.stringify(objHistory);
$.cookie("history", jsonHistory);

编辑

简单的演示(在Chrome和Firefox中测试):

        (function(){
            var o = JSON.parse('{"id":1,"value":"code.google.com"}');
            var e = 'Thu Nov 10 2012 15:44:38';
            document.cookie = 'myObj='+ JSON.stringify(o) +';expires=' + e;
        })()

强烈建议不要以大写字母开头命名变量。这基本上只适用于构造函数。 - T.J. Crowder
当我返回到index.html时,我测试: `var objHistory = $.cookie("history")` `for(var i in objHistory){` `console.log('THIS URL : ' + objHistory[i]);` `}`它显示'Object' :( - Valeriane

5
一个cookie(大小有限制,只有4K)是我尝试存储访问页面数组的最后一个地方。由于其限制,cookie将是我尝试使用的最后一种存储方法。如果您在使用HTML5,请为此目的使用localStorage。
教程:http://www.w3schools.com/html/html5_webstorage.asp localStorage仅处理字符串键/值对。一种解决方法是在存储之前将对象转换为字符串,在检索时解析它:
var testObject = { 'URL': 1, 'TITLE': 2 };
localStorage.setItem('testObject', JSON.stringify(testObject));
var retrievedObject = localStorage.getItem('testObject');
console.log('retrievedObject: ', JSON.parse(retrievedObject));

能否将一个对象存储在localStorage中? - Valeriane
@Valeri:规范里写了什么? - T.J. Crowder
我已经编辑了我的答案,展示如何使用localStorage。请点赞/标记为答案以帮助未来的用户。 - sainiuc
这是一篇来自Smashing Coding的文章:http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ - Alberto De Caro

2

我建议不要使用cookie来存储你正在使用的数据类型,因为cookie基本上是用来存储像密钥、id这样非常小的数据的...

相反,您可以使用本地存储,因为本地存储限制为5 MB,而且可扩展。此外,与cookie相比,本地存储更加安全,因为数据没有被发送到服务器。


-1

你只能存储字符串。一种非常有限的字符串类型。你需要使用一些分隔符来存储这些值。查看允许在cookie中使用的字符,了解可以使用哪些字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接