5

我一直在考虑将数据存储在 cookie 中的两种方法。一种方法是对所有数据使用一个 cookie 并将其存储为 JSON 字符串。

另一种方法是为每条数据使用不同的 cookie。

我看到的第一种方法的缺点是,由于 cookie 中有额外的 JSON 字符,它会在标题中占用更多空间。此外,我还必须解析 JSON 并将其字符串化,这将需要一些处理时间。积极的一面是只使用了一个 cookie。我还缺少其他积极因素吗?

我看到第二种方法的负面影响是会使用更多的 cookie 键值对。

我将存储大约 15-20 个 cookie。每个 cookie 的过期日期都相同。

据我了解,每个域的最大 cookie 数量约为 4000。我们还没有接近这个数字。

有什么我忽略的问题吗?哪种方法最好?

编辑 - 这些 cookie 由 JavaScript 管理。

4

3 回答 3

8

如果您将要存储的任何数据分发给您的用户(cookie 就是这样做的),您应该对数据进行加密,或者至少对其进行签名。

这是保护数据免遭篡改所必需的。

在这一点上,大小考虑已经不存在了(由于填充),解析 JSON 的性能开销也是如此(加密将导致更大的开销)。


结论:将您的数据存储为 JSON,(加密),对其进行签名,将其编码为 base64,并将其存储在单个 cookie 中。请记住,cookie 有一个最大大小(并且是 4K)。

参考:在众多其他框架和应用程序中,这就是Rails 所做的。

于 2013-08-23T21:39:28.647 回答
2

cookie 的最佳实践是尽量减少它们的使用。例如,将您的 cookie 使用限制为仅记住会话 ID,然后将您的数据存储在服务器端。

在欧盟,cookie 受法律法规的约束,并且将 cookie 用于除会话 ID 之外的几乎所有内容都需要明确的客户同意。

于 2013-08-23T21:51:14.110 回答
0

早上好。

我想我理解你。前一段时间,我使用存储为 json 数据加密的 cookie,但用于 Intranet 或管理帐户。对于 shop 的用户,我使用了相同的做法。但是,为了在商店网站上存储产品,我不使用加密。

重要提示:有时我在解密数据之前遇到 json 解码问题。根据您的使用情况,您可以采用以;分隔的存储数据的系统。加密,如:

  • encrypt_function($key, "product:K10072;qtd:1|product:1042;qtd:1|product:3790;qtd:1") 存储产品;和
  • encrypt_function($key, "cad_products:1;mdf_products:2;cad_collabs:0") 存储安全授权。

任何系统都可能被黑客入侵。您需要创建一个具有持续用户数据验证和日志分析的应用程序。是的,这个系统需要快速。

于 2020-10-08T14:32:06.877 回答