使用Cookie进行Web会话状态 - 有哪些缺陷?

时间:2008-12-29 22:41:40

标签: asp.net session cookies webserver session-state

在扩展Web应用程序时使用进程内会话状态是不好的(在集群中不能很好地发挥作用,在服务器回收时会爆炸)。

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

显然,使用cookie会产生少量的网络开销,显然你是在假设客户端浏览器/移动设备上启用了cookie的情况下运行的。

您可以通过方法看到其他哪些陷阱?

对于简单,可扩展且强大的会话,这是一个不错的选择吗?

3 个答案:

答案 0 :(得分:7)

这是一种简单,可扩展且强大的会话的绝佳方法。 当然,你的加密质量很重要,而这往往证明是正确的做法,但这是可行的。

我不同意其他一些海报:

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

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

答案 1 :(得分:2)

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

BTW:除了在cookie中存储一些内容之外,你还应该考虑在cookie中存储密钥并使用memcached(memcached在服务器场之间工作)。

答案 2 :(得分:2)

通常会将cookie用于会话ID,因此只要信息量很小,将信息存储在cookie中是一个不错的选择,尽管您不应存储任何有价值的内容(如CC)数字,SSN等)应该真正存储在cookie中,即使加密也是如此。

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

<强>曲奇

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

状态服务器/ DB

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