【问题标题】:How to store a long string in Js Cookies?如何在 Js Cookies 中存储长字符串?
【发布时间】:2021-04-09 23:08:54
【问题描述】:

您好,我正在使用 JsCookies,它运行良好,但我遇到了问题

每当我在 cookie 中存储一个短字符串时,它都可以正常工作,但缺点是我无法在 cookie 中存储长字符串

例如

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

但是当我尝试存储字符串化 JSON 数据(大字符串)时遇到问题

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

请帮忙

【问题讨论】:

    标签: javascript cookies js-cookie


    【解决方案1】:

    您不能在 cookie 中存储超过 4k 字节,但有一个替代方法

    // Store
    localStorage.setItem("lastname", "Smith");
    
    // Retrieve
    document.getElementById("result").innerHTML = localStorage.getItem("lastname");
    

    在本地存储中,您最多可以存储 5MB 的数据,因此您可以使用它,但问题是,如果您想设置过期时间,您无法以简单的方式做到这一点,您需要为此创建函数.喜欢this

    【讨论】:

      【解决方案2】:

      使用这个功能:

      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

      【讨论】:

        【解决方案3】:

        不应使用 Cookie 来存储大量数据。它们应该用于诸如用户授权和配置选项之类的东西(它们加在一起不会增加太多的有效负载)。当每个请求的数据都与服务器上的客户端相关时,使用 cookie。

        cookie 中的大负载不应该随每个请求一起发送;这将是带宽密集型和不必要的。相反,要么:

        • 如果服务器不需要这些信息,而您只是将其用于客户端存储,请改用Local Storage
        • 如果服务器确实需要该信息,请将数据发送到服务器一次(或者,至少,在单独的请求中将其发送到服务器,但不是在 cookie 中) - 例如通过XHR
        • 如果服务器将拥有信息并且客户端需要它,请以其他方式将数据发送到客户端,而不是将其捆绑在 cookie 中。例如,您可以通过将数据嵌入到发送给客户端的 HTML 响应中来发送数据,或者让客户端向服务器发出网络请求,并让服务器以 JSON 格式的数据进行响应。

        【讨论】:

          【解决方案4】:

          最大 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
          

          【讨论】:

            猜你喜欢
            • 2013-10-04
            • 2021-08-28
            • 1970-01-01
            • 2012-07-09
            • 1970-01-01
            • 2015-12-30
            • 1970-01-01
            • 2011-11-30
            相关资源
            最近更新 更多