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

Ras*_*mus 10 python cookies session flask

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

session['life'] = 'the great one'
Run Code Online (Sandbox Code Playgroud)

会出现

life='gfhjfkjdfa some encryption kj'
Run Code Online (Sandbox Code Playgroud)

在客户端保存的cookie中.但是,如果它仍然是加密的,那将是多么重要.我相信这里的人比我更了解事情,所以请求有人请澄清:-)

Nic*_*ick 15

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

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

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

  • 如果将100个信用加密为信用="abc",则用户可以看到这一点,并且知道"abc"将被解密为100.他们不需要能够自己解密它.所以他们可以花掉所有的积分,然后再将积分设置为"abc".有一些方法可以防止这种情况,但是当你可以将数据存储在服务器上时,这并不值得麻烦. (8认同)
  • 这基本上是一次重播攻击:http://en.wikipedia.org/wiki/Replay_attack. (5认同)

Ned*_*der 7

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

  • 但是,是的,+1,因为我觉得这是一个有效的原因,我想我可以放心地忽略我的应用程序:-).但是仍然在等待更多的答案! (2认同)

Jag*_*mag 6

除了上面已经提到的要点

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

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

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

  • @Alice - 实际上这就是我想要表达的观点。基本上,您需要将与会话相关的数据存储在服务器上,因为由于上述示例,将其存储在客户端上是不可靠的。当 cookie 被禁用时,sessionid 通常作为它的一个值在查询字符串中传递。会话可以独立于 cookie - 即使是会话 ID (2认同)