2010-10-16 100 views
8

我一直在使用Flask一段时间,我非常喜欢这个框架。我不明白的一件事情是,在几乎所有其他地方,他们都会谈论将会话存储在服务器上,然后会话ID在客户端上,然后识别会话。但使用烧瓶后,我觉得没有必要这样做。将会话保存为客户端上的cookie加密服务于我的目的,并且看起来相当安全。唯一存在我无法会话密钥进行加密,例如:作为为什么要在服务器上存储会话而不是在cookie中?

life='gfhjfkjdfa some encryption kj' 
在cookie

保存在客户端上

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

将会出现。但是,它会如何加密呢? 我相信这里的人比我知道的要好得多,所以请求某人请澄清:-)

回答

14

即使你的数据被加密,用户仍然可以回滚他们的cookie到以前的状态(除非你开始编码的一次性标识等)

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

根据您如何加密cookie,用户也可以删除密钥,插入伪造数据等。

+0

感谢尼克!但再次不会加密照顾it.for例如会议[学分] = 100将被保存为诸如credits ='agfkalh加密agakh'之类的东西。如果用于加密cookie的秘密密钥对于用户是未知的并且足够困难,他将如何能够引起任何变化。我的意思是他肯定可以继续删除密钥并插入一些伪造的数据,但只要他无法解密cookie,怎么可能会产生任何问题 – Rasmus 2010-10-16 13:26:37

+6

如果100学分被加密为credits =“abc”,用户可以看到这个,并知道“abc”将被解密为100.他们不需要能够自己解密,因此他们可以花费所有的学分,然后再次设置学分为“abc”。 有许多方法可以防止这种情况发生,但是当您只能将数据存储在服务器上时,这并不值得一提。 – Nick 2010-10-16 14:21:09

+0

谢谢! ..这是我一直在寻找的东西,只是没有跨越我的想法。 – Rasmus 2010-10-16 18:39:50

7

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

+0

对于一个很好,简洁的摘要+1。 – 2010-10-16 13:10:55

+0

谢谢Ned!但在大多数情况下,数据量可以忽略不计。 – Rasmus 2010-10-16 13:19:12

+2

但是,+1,因为我觉得这是一个有效的原因,我猜我可以放心地忽略我的应用程序:-),但仍然等待更多的答案! – Rasmus 2010-10-16 13:36:45

6

除了上面

  1. 用户已经提到的点可以禁止使用其浏览器设置的cookie。 许多防病毒扫描程序也会扫描并标记为cookie的风险,因为这些风险也会导致用户计算机上不允许cookie。

  2. 即使在会话中间,用户也可以删除Cookie。 (事实上​​,前两天我无意中做了一次,当时我的个人电脑扫描列出了追踪cookies ......而我只是点击了“清洁”,他们都没了)。如果用户恰好删除了cookie,用户状态将会丢失。

如果您使用cookie来管理整个状态,您总是依赖于客户端环境及其设置。因此,您可能会至少需要一个回退机制,以防止Cookie被删除/禁用等,以便您的应用程序正常工作。

+0

感谢InSane的回复,但那不是我真正想知道的:-)。我想知道的是为什么要在服务器上存储任何与会话相关的数据。我的意思是即使你将会话变量存储在服务器上,你也必须将会话ID存储在客户端的cookie中。要回答你所说的话,通过删除cookie,用户实际上对自己造成更多伤害,因为他失去了会话。如果他登录该网站,他可能实际上被注销,或者他甚至可能会丢失一些数据。就禁用cookies而言,我认为必须对后备进行处理。谢谢 – Rasmus 2010-10-16 13:42:24

+1

@爱丽丝 - 其实这是我想要做的。基本上,您需要将会话相关数据存储在服务器上,因为存储在客户端上是不可靠的,因为上面提到的例子。当cookie被禁用时,sessionid通常作为一个值传递给查询字符串。会话可以独立于cookie - 即使会话编号为 – InSane 2010-10-16 13:46:04

+0

“sessionid通常以查询字符串的形式作为其一个值传递” - 是的,这听起来不错..1 ...感谢 – Rasmus 2010-10-16 13:49:54

1

SecureCookie的实现Flask使用不加密值。唯一可以确保的是用户不知道应用程序使用的密码就无法修改cookie。

相关问题