gjb*_*gjb 64 cookies session ruby-on-rails ruby-on-rails-3
在Rails 3中,将数据存储在cookie中并在会话中存储数据之间有什么区别,会话存储设置为默认的CookieStore?
例如
cookie[:foo] = 'bar'
# MyApp::Application.config.session_store :cookie_store, key: '_myapp_session'
session[:foo] = 'bar'
Run Code Online (Sandbox Code Playgroud)
据我所知,两者最终都存储在客户端cookie中.
你什么时候选择使用一个而不是另一个?
谢谢.
Wol*_*ang 111
主要区别在于,当您使用cookie[:foo] = 'bar'用户时,能够看到cookie的值,即'bar'.当您使用session[:foo] = 'bar'该值时,将通过rails加密并存储在_myapp_sessioncookie中.
cookie[]当您要存储的信息未绑定到会话时,例如当用户选择首选语言时,您将使用该格式.
如果session[]要存储与当前会话相关的信息(例如id用户的信息),则可以使用该格式.
dan*_*per 11
Rails为会话哈希提供了几种存储机制.最重要的是ActiveRecord::SessionStore和ActionDispatch::Session::CookieStore.
有许多会话存储,即Rails保存会话哈希和会话ID的位置.ActiveRecord::SessionStore由于性能和维护原因,大多数实际应用程序选择(或其衍生产品之一)文件存储.ActiveRecord::SessionStore将会话ID和散列保存在数据库表中,并在每个请求中保存和检索散列.
Rails 2引入了一个新的默认会话存储,CookieStore.CookieStore将会话哈希直接保存在客户端的cookie中.服务器从cookie中检索会话哈希,并且不需要会话ID.这将大大提高应用程序的速度,但它是一个有争议的存储选项,你必须考虑它的安全含义:
Cookies意味着严格的4kB大小限制.这很好,因为您不应该在会话中存储大量数据,如前所述.在会话中存储当前用户的数据库ID通常是可以的.客户端可以看到您在会话中存储的所有内容,因为它以明文形式存储(实际上是Base64编码的,因此未加密).所以,当然,你不想在这里存储任何秘密.为了防止会话哈希篡改,从具有服务器端密钥的会话计算摘要并将其插入到cookie的末尾.这意味着此存储的安全性取决于此秘密(以及摘要算法,默认为SHA512,尚未泄露).所以不要使用琐碎的秘密,即字典中的单词,或短于30个字符的单词
| 归档时间: |
|
| 查看次数: |
17552 次 |
| 最近记录: |