如何在Js Cookies中存储一个长字符串?
How to store a long string in Js Cookies?
您好,我正在使用 JsCookies 它运行良好,但我遇到了问题
每当我在 cookie 中存储一个短字符串时,它工作正常,但缺点是我无法在 cookie 中存储长字符串
例如
这工作正常 = Cookies.set('Coo', 'string', { expires: 1 })
但是每当我尝试存储字符串化的 JSON 数据(大字符串)时都会遇到问题
Cookies.set('foo', JSON.stringify(result))
请帮忙
最大 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
不应使用 Cookie 来存储大量数据。它们应该用于诸如用户授权和配置选项之类的东西(它们加在一起不会构成太多的有效负载)。当数据在每次请求时都与服务器上的客户端相关时使用 cookie。
不应在每次请求时都发送 cookie 中的大负载;这将是带宽密集型且不必要的。相反,要么:
- 如果服务器不需要这些信息,而您只是将其用于客户端存储,请改用 Local Storage
- 如果服务器确实需要这些信息,请将数据发送到服务器一次(或者至少将其发送到服务器在单独的请求中,但不在 cookie 中)- 例如通过 XHR.
- 如果服务器有信息并且客户端需要它,请通过其他方式将数据发送给客户端,而不是将其捆绑在 cookie 中。例如,您可以通过将数据嵌入发送给客户端的 HTML 响应来发送数据,或者让客户端向服务器发出网络请求,并让服务器响应 JSON.
使用此功能:
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
您不能在 cookie 中存储超过 4k 字节,但有一个替代方法
// Store
localStorage.setItem("lastname", "Smith");
// Retrieve
document.getElementById("result").innerHTML = localStorage.getItem("lastname");
在本地存储中,你最多可以存储5MB的数据,所以你可以用这个,但问题是如果你想设置过期时间你不能用简单的方法来做,你需要做函数为了那个原因。喜欢 this
您好,我正在使用 JsCookies 它运行良好,但我遇到了问题
每当我在 cookie 中存储一个短字符串时,它工作正常,但缺点是我无法在 cookie 中存储长字符串
例如
这工作正常 = Cookies.set('Coo', 'string', { expires: 1 })
但是每当我尝试存储字符串化的 JSON 数据(大字符串)时都会遇到问题
Cookies.set('foo', JSON.stringify(result))
请帮忙
最大 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
不应使用 Cookie 来存储大量数据。它们应该用于诸如用户授权和配置选项之类的东西(它们加在一起不会构成太多的有效负载)。当数据在每次请求时都与服务器上的客户端相关时使用 cookie。
不应在每次请求时都发送 cookie 中的大负载;这将是带宽密集型且不必要的。相反,要么:
- 如果服务器不需要这些信息,而您只是将其用于客户端存储,请改用 Local Storage
- 如果服务器确实需要这些信息,请将数据发送到服务器一次(或者至少将其发送到服务器在单独的请求中,但不在 cookie 中)- 例如通过 XHR.
- 如果服务器有信息并且客户端需要它,请通过其他方式将数据发送给客户端,而不是将其捆绑在 cookie 中。例如,您可以通过将数据嵌入发送给客户端的 HTML 响应来发送数据,或者让客户端向服务器发出网络请求,并让服务器响应 JSON.
使用此功能:
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
您不能在 cookie 中存储超过 4k 字节,但有一个替代方法
// Store
localStorage.setItem("lastname", "Smith");
// Retrieve
document.getElementById("result").innerHTML = localStorage.getItem("lastname");
在本地存储中,你最多可以存储5MB的数据,所以你可以用这个,但问题是如果你想设置过期时间你不能用简单的方法来做,你需要做函数为了那个原因。喜欢 this