将 JSON 对象存储在 cookie 中是一种好习惯吗?

yaj*_*jiv 11 javascript cookies json

我有以下对象。

position = {
    latitude: 19.067863700000004,
    longitude: 72.9991898,
    pincode: 400701
}
Run Code Online (Sandbox Code Playgroud)

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

我知道三种方法。

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

var pos = JSON.stringify(position);
document.cookie = "position=" + pos;
Run Code Online (Sandbox Code Playgroud)

ⅱ)创建三个饼干latitudelongitudepincode和在相应的cookie存储各自的值。

document.cookie = "latitude=" + position.latitude;
document.cookie = "longitude=" + position.longitude;
document.cookie = "pincode=" + position.pincode;
Run Code Online (Sandbox Code Playgroud)

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

var pos = position.latitude + "|" + position.longitude + "|" + position.pincode;
document.cookie = "position=" + pos;
Run Code Online (Sandbox Code Playgroud)

我的问题是存储 cookie 的最佳/理想方式是什么?(如果可能,请说明原因)

Dan*_*ith 9

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

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

记住:

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

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

  • 大而复杂的对象 = 您将拥有大饼干。人们可以轻松地超过4K 大小的 cookie限制

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

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

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