【问题标题】:Best Practice for CookiesCookie 的最佳实践
【发布时间】:2020-10-08 22:32:06
【问题描述】:

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

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

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

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

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

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

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

编辑 - 这些 cookie 由 JavaScript 管理。

【问题讨论】:

  • 我会完全避免使用 cookie 并使用本地存储。你有什么不想这样做的理由?有关示例,请参阅here,包括如何序列化/反序列化对象。
  • @TimMedora cookie 用于 sessionId 和 visitorId。我们使用了一些分析供应商,我们需要同步 ID。

标签: cookies


【解决方案1】:

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

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

此时,大小方面的考虑已经不存在了(由于填充),解析 JSON 的性能开销也是如此(加密会导致更大的开销)。


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

参考:在众多其他框架和应用程序中,这是what Rails does

【讨论】:

  • 如果cookie是在客户端管理的,是否可以安全地加密数据?
  • 保持 cookie 安全不是应用程序的工作,而是浏览器的工作
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    早上好。

    我想我理解你。前一段时间,我使用存储为 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") 存储安全授权。

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

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 2015-02-20
      • 1970-01-01
      • 2018-07-20
      • 2021-12-08
      相关资源
      最近更新 更多