在Rails中,基于cookie的会话存储,会话和cookie是一回事

我一直在使用基于cookie的会话商店,直到现在才知道Cookies 。 那么有什么情况我需要cookie哈希?

Cookie散列肯定在Rails应用程序中有价值。 您应该使用cookie在客户端存储要在会话之间记住的值。

“记住我”的标记就是一个很好的例子。 如果您希望允许用户在访问您的站点时自动登录,只需存储具有一些用户防篡改值的持久性cookie(如唯一的哈希或guid(好),映射到数据库中该用户的行但是不像只使用普通的旧整数用户ID(坏)就不可攻击。 然后,当用户访问您的站点时,您可以检查Cookie哈希以获取记住我的令牌,如果找到,则在您的数据库中执行查找并在找到匹配项时将用户登录。 这是一种非常常见的做法。

如果您需要/想要在客户端cookie中存储纯文本值,但不希望用户能够使用这些值,只需将该值的哈希值存储在随播cookie中,并将哈希值加入一些未知值给用户。 然后,您只需计算从客户端cookie接收的明文值的盐渍哈希值,并将其与从客户端cookie传递的哈希值进行比较。 如果匹配,你可以相信它。

任何可能使用cookie的情况似乎都被cookie会话存储同样很好地服务。 rails cookie会话存储是安全的,因为最终用户可以读取会话数据但不能修改它。

是的,我真的很困惑会话与cookie的关系,同时思考如何实现记住我的OpenID登录…这实际上与基于密码的登录没有区别。 但这不是我的代码,它来自restful-authentication插件,而且没有什么能像你自己一样思考整个过程。

您不应存储任何您不希望用户查看或更改cookie的内容。 如果您存储成员ID,则用户可以轻松更改该值并假装成其他人。 每次向Web服务器发送请求时都会发送Cookie,包括图像,JS和CSS请求。 如果您在cookie中存储大量信息,这可能会对速度产生影响。

基于Cookie的会话(在一般情况下,我不能说我知道Rails的作用)意味着您的会话变量与随机生成的会话ID相关联。 此ID以及唯一ID将作为cookie返回给用户。 这允许您将用户请求(因为您有会话ID cookie)与用户的会话相关联。 这更安全,因为有人猜测另一个用户会话的ID是非常困难的。