7

当涉及到扩展 Web 应用程序时,使用进程内会话状态是有害的(不能很好地与集群一起使用,当服务器回收时会爆炸)。

假设您只需要在会话状态中保留少量信息,那么为此目的使用加密的 cookie 项而不是特定状态服务器/数据库的缺点是什么?

显然,使用 cookie 会产生少量的网络开销,并且显然您是在客户端浏览器/移动设备上启用 cookie 的假设下操作的。

您还可以看到哪些其他陷阱?

对于简单、可扩展和健壮的会话来说,这是一个不错的选择吗?

4

3 回答 3

7

对于简单、可扩展和健壮的会话来说,这是一种极好的方法。当然,你的加密货币的质量很重要,这通常是一件很难做到的事情,但这是可以做到的。

我不同意其他一些海报:

可以针对加密的 cookie 值发起的任何重放攻击都可以针对存储为 cookie 的会话密钥发起。如果这很重要,请使用 https。

如果清除 cookie,存储在状态服务器或数据库中的会话数据也会丢失;当会话密钥丢失时,将无法再检索会话。

于 2008-12-29T23:17:21.413 回答
2

另一个陷阱是它们可能被盗并在您的网站上重放。

顺便说一句:除了在 cookie 中存储一些东西之外,您还应该考虑在 cookie 中存储一个键并使用 memcached 之类的东西(memcached 跨服务器场工作)。

于 2008-12-29T23:02:11.523 回答
2

好吧,通常 cookie 用于会话 ID,因此只要信息量很小,将信息存储在 cookie 中就是一个不错的选择,尽管您不应该存储任何有价值的东西(如 CC 号码、SSN等)应该真正存储在 cookie 中,即使已加密。

我不是专家,但根据我的经验,我发现以下是正确的(至少使用 PHP 和 ASP.Net)。

曲奇饼

  • [pro] 可扩展性很好,因为它会在每个请求上传输
  • [pro] Cookie 只能通过 SSL 连接提交
  • [pro] 可以使用跨服务器技术,和跨服务器机器
  • [con] 在每个请求和响应中传输数据
  • [con] 需要在浏览器上启用

状态服务器/数据库

  • [pro] 仅存储在服务器上的数据
  • [pro] 即使用户清除 cookie,数据仍然存在
  • [pro] 可以使用跨服务器技术
  • [con] 需要在请求/响应时传递一个 ID(因此需要 cookie 或附加到每个 URL)
  • [con] 在默认模式下不能很好地扩展,但如果整台机器可以专门和专门用于状态,那么这不是什么大问题。可以遵循许多其他扩展技术来实现可扩展性。
  • [con] 需要通过 URL 或 Cookie 或其他方式传递的会话 ID 变量,以使用户与数据保持联系。
于 2008-12-29T23:02:18.153 回答