为什么要在服务器上而不是在cookie中存储会话?

时间:2010-10-16 12:57:37

标签: python session cookies flask

我已经使用Flask一段时间了,我真的很喜欢这个框架。我无法理解的一件事是,在几乎所有其他地方,他们都谈到在服务器上存储会话和客户端上的会话ID,然后会识别会话。然而,在使用烧瓶后,我觉得不需要这样做。将会话保存为客户端上的cookie加密服务于我的目的,并且看起来也非常安全。唯一的问题是我无法加密会话密钥,例如:

session['life'] = 'the great one'

将显示为

life='gfhjfkjdfa some encryption kj'
保存在客户端上的cookie中的

。但是,如果它仍然是加密的,那将是多么重要。 我相信这里的人比我更了解事情,所以请求有人请澄清:-)

4 个答案:

答案 0 :(得分:15)

即使您的数据已加密,用户仍可以将其cookie回滚到以前的状态(除非您开始编码一次性ID等)

e.g。 cookie说用户有100个学分,用户花费100个学分,他们得到一个新的cookie,说他们有0个学分。然后他们可以恢复以前的cookie(100个积分)。

根据您对cookie的加密方式,用户也可以删除密钥,插入虚假数据等。

答案 1 :(得分:7)

如果服务器需要会话数据,则将其存储在服务器上是有意义的。它可以减少从客户端来回发送的数据量。此外,Cookie对其可以存储的数据量有限制。

答案 2 :(得分:6)

除了上面提到的要点之外

  1. 用户可以使用浏览器设置禁用Cookie。 许多防病毒扫描程序还会扫描并标记cookie作为风险,因为这也可能导致用户计算机上不允许使用cookie。

  2. 即使在会话过程中,用户也可以删除Cookie。 (事实上​​,有一天,当我的PC扫描列出跟踪cookie时,我无意中做到了这一点......我只是点击了“清洁”而且它们都已经消失了)。如果用户碰巧删除了cookie,则用户状态将丢失。

  3. 如果您使用Cookie来管理整个州,则始终依赖于客户端环境及其设置。因此,如果cookie被删除/禁用等,您可能至少需要一个后退机制,以便您的应用程序正常工作。

答案 3 :(得分:1)

SecureCookie实现Flask使用不加密值。唯一可以确保的是,用户无法在不知道应用程序使用的秘密的情况下修改cookie。