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

时间:2008-11-21 23:04:40

标签: ruby-on-rails http

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

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

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