首页 > 解决方案 > 将 JSON 对象存储在 cookie 中是一种好习惯吗?

问题描述

我有以下对象。

position = {
    latitude: 19.067863700000004,
    longitude: 72.9991898,
    pincode: 400701
}

我想将纬度、经度和密码的值存储在 cookie 中。

我知道三种方法。

i)将整个position对象存储在cookie中。(根据this不推荐)

var pos = JSON.stringify(position);
document.cookie = "position=" + pos;

ii)创建三个cookie latitudelongitude并将pincode各自的值存储在各自的cookie中。

document.cookie = "latitude=" + position.latitude;
document.cookie = "longitude=" + position.longitude;
document.cookie = "pincode=" + position.pincode;

iii) 创建一个 cookieposition并在此 cookie 中存储值是19.067863700000004|72.9991898|400701

var pos = position.latitude + "|" + position.longitude + "|" + position.pincode;
document.cookie = "position=" + pos;

我的问题是存储 cookie 的最佳/理想方式是什么?(如果可能,请给出理由)

标签: javascriptjsoncookies

解决方案


对于那个小对象,我肯定会把它作为 JSON 放入 cookie 中。这样做的开销几乎不存在,绝对不是问题。

至于什么通常最有效,这在很大程度上取决于您拥有什么以及最终想要什么。

记住:

  • 它会产生开销(来自 JSON 结构、附加字符)和 w 你不希望其他应用程序用这样的简单名称覆盖你的 cookie。

  • 选择一个更好的名称,其名称前缀为 yourappname-something 或一些随机较长的字符串,而不是名称。

  • 大而复杂的对象 = 你会有大的 cookie。人们可以轻松地超过4K 大小的 cookie 限制。

要解决最后一个问题,您可以在每个 cookie 中放置最少的有效负载,但是对于大量数据,您最终会得到很多 cookie,并且它不像人们想要的那样可读。如果您的对象有嵌套对象名称将开始看起来像 myapp-object-nested1-nested2-property。当您再次需要来自 cookie 的单个对象时,这可能很难导航然后重新组合在一起。

您可以混合使用这两种方法 - 在有意义的情况下将大型对象重组为较小对象的组合。这将介于太大的 cookie 和太多的小 cookie 名称之间。尝试以一种使重新组装可读且快速的方式进行操作。

另一种选择是浏览器的本地或会话存储,那里的限制要高得多,因此您可以直接转储更大的 JSON。


推荐阅读