首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Cookie与使用CookieStore的会话

Cookie与使用CookieStore的会话
EN

Stack Overflow用户
提问于 2013-02-22 18:53:34
回答 2查看 20.4K关注 0票数 69

在Rails3中,将数据存储在cookie中和将数据存储在会话中(会话存储设置为默认的CookieStore )之间有什么区别?

例如:

代码语言:javascript
复制
cookie[:foo] = 'bar'

# MyApp::Application.config.session_store :cookie_store, key: '_myapp_session'
session[:foo] = 'bar'

据我所知,两者最终都存储在客户端cookie中。

什么时候你会选择使用一种而不是另一种?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 17:01:17

主要区别在于,当您使用cookie[:foo] = 'bar'时,用户能够看到Cookie值,即'bar'。当您使用session[:foo] = 'bar'时,值将由rails加密并存储在_myapp_session cookie中。

当您要存储的信息未绑定到会话时,例如当用户选择首选语言时,您将使用cookie[]格式。

当您想要存储与当前会话相关的信息时,例如用户的id,您可以使用session[]格式。

票数 123
EN

Stack Overflow用户

发布于 2013-02-25 20:39:19

Rails为会话散列提供了几种存储机制。最重要的是ActiveRecord::SessionStoreActionDispatch::Session::CookieStore

有许多会话存储,即Rails保存会话散列和会话id的位置。由于性能和维护方面的原因,大多数实际应用程序选择ActiveRecord::SessionStore (或其衍生产品)而不是文件存储。ActiveRecord::SessionStore将会话id和散列保存在数据库表中,并在每次请求时保存和检索散列。

Rails2引入了一个新的默认会话存储CookieStoreCookieStore将会话散列直接保存在客户端的cookie中。服务器从cookie中检索会话散列并消除对会话id的需要。这将极大地提高应用程序的速度,但它是一个有争议的存储选项,您必须考虑它的安全影响:

Cookie意味着4kB的严格大小限制。这很好,因为您不应该在会话中存储大量数据,如前所述。在会话中存储当前用户的数据库id通常是可以的。客户端可以看到您在会话中存储的所有内容,因为它是以明文形式存储的(实际上是Base64编码的,所以没有加密)。所以,当然,你不想在这里存储任何秘密。为了防止会话哈希篡改,将从带有服务器端机密的会话中计算摘要,并将摘要插入到cookie的末尾。这意味着这个存储的安全性取决于这个秘密(以及摘要算法,它默认为SHA512,它还没有被攻破)。所以不要使用琐碎的秘密,例如字典中的单词,或者少于30个字符的单词

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15022497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档