Javascript 如何在cookie中保存大数据

Javascript 如何在cookie中保存大数据,javascript,php,jquery,cookies,Javascript,Php,Jquery,Cookies,根据本文,我们可以在每个cookie中存储4kb字符串 现在我想在cookie中存储超过4KB的字符串(没有本地存储) 你的解决方案是什么 这是一个好办法。但我不知道如何编码。不要将数据存储在cookie中。 使用会话外观或会话帮助程序在会话中存储数据 如果需要长时间保存,请在cookie中存储一个唯一的id,并使用该id从相关的序列化文件或数据库检索数据。请确保使用安全的方法生成ID并验证ID,这样一些恶意用户就无法伪造cookie ID来对其进行迭代并获取其他用户的所有数据。这是一个有趣的

根据本文,我们可以在每个cookie中存储4kb字符串

现在我想在cookie中存储超过4KB的字符串(没有本地存储)

你的解决方案是什么



这是一个好办法。但我不知道如何编码。

不要将数据存储在cookie中。 使用会话外观或会话帮助程序在会话中存储数据


如果需要长时间保存,请在cookie中存储一个唯一的id,并使用该id从相关的序列化文件或数据库检索数据。请确保使用安全的方法生成ID并验证ID,这样一些恶意用户就无法伪造cookie ID来对其进行迭代并获取其他用户的所有数据。

这是一个有趣的问题(但这是一个糟糕的想法),所以我决定测试它只是为了好玩(我甚至会给你一些代码,如果你坚持的话,你可以这么做)。。但问题是,来自该域的每个请求都会将Cookie发送到服务器,如果您很快将尽可能多的任意数据塞进Cookie,那么请求头将太大,服务器无法理解

在我的测试中,我在将大量数据塞进页面的cookies后,一刷新页面就得到了这个消息

错误的请求 您的浏览器发送了此服务器无法理解的请求。 请求标头字段的大小超过服务器限制

Cookie

这是我用来测试它的代码。它完全按照您的建议执行,将字符串分成块(在检查浏览器能够将多少数据塞进单个cookie之后),然后将每个块插入到索引cookie中

这打破了我在Chrome中的测试领域,不要在生产中使用它,只用于测试。
var veryBigString=“Farts”。重复(99999);
setCookieBatch('myBigCookie',veryBigString);
函数setCookieBatch(cname,bigStr){
var chunks=bigStr.match(新的RegExp('[\\s\\s]{1',+maxCookieSize()+'}',g');
for(var i=chunks.length;i--;){
setCookie(cname+“”+i,chunks[i]);
}
}
函数maxCookieSize(){
对于(变量i=0;i++){
让str=“1”。重复(i);
setCookie(“c000test”,str);
如果(getCookie('c000test')!==str{
document.cookie='c000test=;expires=Thu,1970年1月1日00:00:01 GMT;';
返回i;
}
}
}
函数setCookie(cname,cvalue){
var d=新日期();
d、 设置时间(d.getTime()+864000000000);
var expires=“expires=“+d.toutString();
document.cookie=cname+“=”+cvalue+”;“+expires+”;path=/”;
}
函数getCookie(cname){
变量名称=cname+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i


如果您想要一个好的跨浏览器解决方案,请考虑;p> laravel与浏览器烹饪无关我的解决方案是不要。。。改用一次会议(不确定为什么这个问题被否决了tbh-似乎符合否决按钮下的定义“这个问题没有显示任何研究成果;它不清楚或没有用处”)。我的第一个问题是,你在cookie中存储这么多数据到底是为了什么?@Iwrestledabearonce。我们可以在laravel中发送cookie作为响应。

\cookie::make(“name”,“value”,3000)cookie[0] = 4kb
cookie[1] = 4kb
cookie[2] = 4kb
cookie[3] = 4kb
var veryBigString = "Farts ".repeat(99999);
setCookieBatch('myBigCookie', veryBigString);

function setCookieBatch(cname, bigStr){
  var chunks = bigStr.match(new RegExp('[\\s\\S]{1,' +maxCookieSize() + '}', 'g'));
  for(var i=chunks.length; i--;){
    setCookie(cname+"_"+i, chunks[i]);
  }
}

function maxCookieSize(){
  for(var i=0;;i++){
    let str = "1".repeat(i);
    setCookie("c000test", str);
    if(getCookie('c000test') !== str){ 
      document.cookie = 'c000test=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
      return i;
    }
  }
}

function setCookie(cname, cvalue) {
  var d = new Date();
  d.setTime(d.getTime() + 864000000000);
  var expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
  }
  return "";
}