【问题标题】:set object into cookie将对象设置为 cookie
【发布时间】:2012-10-28 17:20:10
【问题描述】:

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

我想存储所有访问过的页面,我为此使用了 cookie

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

  • 页面网址
  • 页面标题

我开始在 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 中获取我的对象时,它显示一个字符串“对象”而不是对象

是否可以在 cookie 中设置对象?

感谢您的帮助

【问题讨论】:

  • Cookie 值是 always 字符串。
  • 请在投反对票的同时添加 cmets。我不关心代表,我关心协作和知识共享。所以,请解释和评论。

标签: javascript html cookies web


【解决方案1】:

我建议不要使用 cookie 来存储您正在使用的数据类型,因为 cookie 基本上是用来存储非常少量的数据,例如一些密钥、id...

您可以改用本地存储,因为本地存储限制为 5 MB,这也是可扩展的。此外,本地存储比 cookie 更安全,因为数据不会发送到服务器。

【讨论】:

    【解决方案2】:

    您总是可以将您的对象字符串化为 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;
            })()
    

    【讨论】:

    • 强烈建议不要以大写字母开头的变量名。这几乎只适用于构造函数。
    • 当我返回 index.html 时,我测试:var objHistory = $.cookie("history")for(var i in objHistory){console.log('THIS URL : ' + objHistory[i]);} 它显示“对象”:(
    【解决方案3】:

    cookie(具有有限的 4K 大小)是我尝试存储访问过的页面数组的最后一个位置。由于其局限性,cookie 将是我尝试使用的最后一种存储方法。如果您使用的是 HTML5,为什么不使用 localStorage 来实现此目的?

    教程:http://www.w3schools.com/html/html5_webstorage.asp

    localStorage 仅处理 STRING 键/值对。一种解决方法是在存储对象之前对其进行字符串化,然后在检索时对其进行解析:

    var testObject = { 'URL': 1, 'TITLE': 2 };
    localStorage.setItem('testObject', JSON.stringify(testObject));
    var retrievedObject = localStorage.getItem('testObject');
    console.log('retrievedObject: ', JSON.parse(retrievedObject));
    

    【讨论】:

    • 可以在localStorage中设置对象吗?
    • @Valeri:in the specification 说什么?
    • 我在上面编辑了我的答案,以展示如何使用 localStorage。请投票/标记为答案以帮助未来的用户。
    • Here 是 Smashing Coding 的一篇文章
    【解决方案4】:

    您只能存储字符串。一种非常有限的字符串类型。您需要使用一些分隔符来存储这些值。看看Allowed characters in cookies哪些可以用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2021-05-16
      • 2018-01-28
      • 2016-12-29
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多