如何在JavaScript Cookie中存储一个长字符串?

3

您好,我正在处理与JsCookies相关的IT技术问题。它运行良好,但是我遇到了一个问题。

每当我在Cookie中存储短字符串时,它都能正常工作,但缺点是我无法在Cookie中存储长字符串。

例如:

这个可以正常工作 = Cookies.set('Coo', 'string', { expires: 1 })

但是,当我尝试存储序列化的JSON数据(大字符串)时,就会出现问题。

Cookies.set('foo', JSON.stringify(result))

请帮忙

4个回答

2
Cookies不应该用于存储大量数据。它们应该被用于用户授权和配置选项之类的东西(全部加在一起也不会很大)。只有当数据与每个请求的客户端和服务器都相关时才使用cookies。
不应该在每个请求中发送大量cookie负载;这会消耗带宽并且不必要。相反,可以选择:
- 如果服务器不需要这些信息,并且你只是想在客户端进行存储,使用本地存储(Local Storage)。 - 如果服务器需要这些信息,只需将数据发送到服务器一次(或者至少在单独的请求中发送,但不要在cookies中发送),例如通过XHR(跨域资源共享)。 - 如果服务器将拥有这些信息并且客户端需要它们,可以通过其他方式将数据发送到客户端,而不是将其捆绑在cookie中。例如,可以将数据嵌入HTML响应中向客户端发送,或者让客户端向服务器发出网络请求,并让服务器以JSON格式响应数据。

1

你不能在cookie中存储超过4k字节的数据,但有一种替代方法。

// Store
localStorage.setItem("lastname", "Smith");

// Retrieve
document.getElementById("result").innerHTML = localStorage.getItem("lastname");

在本地存储中,您可以存储高达5MB的数据,因此您可以使用它,但问题是如果您想设置过期时间,您无法简单地完成它,您需要为此创建函数。例如this

0

Cookie的最大大小为4K字节。您不能存储超过此大小的内容。在此处阅读有关cookie限制的更多信息:http://browsercookielimits.iain.guru/

如果我在Chrome浏览器上运行测试,它会显示以下内容:

10:41:28.954: Guessing Max Cookie Count Per Domain: 180
10:41:28.954: Guessing Max Cookie Size Per Cookie: 4096 bytes

0
使用此函数:
function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

但是,Cookie 的大小存在限制(4,096 字节)。

但是你可以使用多个 Cookie,不过在此方面也有限制:

  • Chrome 9 允许每个域名 180 个 Cookie

  • Firefox 3.6.3 允许每个域名 50 个 Cookie

  • Internet Explorer 8 允许每个域名 50 个 Cookie

  • Opera 10 和 9 允许每个域名 30 个 Cookie


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