Rails会议目前的做法
任何人有任何Rails和会议的“最佳做法”提示? Rails 3的默认会话types仍然是CookieStore,对不对? 我用了一段时间的SqlSessionStore,它运行良好,但我可能会离开,赞成CookieStore。
使用CookieStore进行敏感信息,即使是腌制信息,还是更好地存储在数据库中,是不是一个好主意?
使用会话数据库而不是基于cookie的默认值,这不应该用来存储高度机密的信息
使用创build会话表
rake db:sessions:create
运行迁移
rake db:migrate
确保你也告诉rails使用ActiveRecord来pipe理你的会话。
Rails 3
configuration/初始化/ session_store.rb:
Rails.application.config.session_store :active_record_store
Rails 2
到config / environment.rb:
config.action_controller.session_store = :active_record_store
Cookie在Rails 4中默认encryption
在Rails 4中, CookieStore Cookie被默认encryption和签名:
如果您只设置了
secret_token
,则您的Cookie将被签名,但不会被encryption。 这意味着用户不能在不知道应用程序的密钥的情况下更改其user_id
,但可以轻松读取其user_id
。 这是Rails 3应用程序的默认值。如果你设置了
secret_key_base
,你的cookies将被encryption。 这比签名的cookie更进一步,encryption的cookie不能被用户改变或读取。 这是从Rails 4开始的默认值。如果您同时设置了
secret_token
和secret_key_base
,则您的Cookie将被encryption,并且由Rails 3生成的签名Cookie将被透明地读取和encryption,以提供平稳的升级path。
活动logging会话存储在Rails 4中已弃用
现在, 这个答案已经过时了。关于Rails 4,活动logging会话存储已被弃用,并从Rails中删除,所以下面的生成器将不再工作:
-
rake db:sessions:create
-
rails generate session_migration
这是在这个答案中指出的。 Active Record Session Store被弃用的原因是因为当您有大量用户访问您的应用程序时,数据库的读取/写入不能很好地扩展,正如本博客所述 :
Active Record会话存储的一个主要问题是不可扩展。 它会给你的数据库带来不必要的负担。 一旦您的应用程序接收到大量的stream量,会话数据库表就会持续受到读/写操作的轰炸。
从Rails 4开始,Active Record会话存储已经从核心框架中移除,现在已经被弃用了。
如果你仍然想使用Active Record Session Store, 它仍然可以作为gem 。
当前的Rails会话最佳实践
有关Ruby on Rails会话的更多最佳实践,我build议您查看最新版本的Ruby on Rails安全指南 。
我不相信任何平台上的任何人应该如何处理基于cookie的会话。 对超越服务器控制的任何东西(cookies,表单post等)持怀疑态度。这是web开发的一般原则。
就encryption而言,我不知道在这方面是否有任何改变。
有一点需要注意的一个cookie存储是数据量的限制,这个数据将在每一个请求在networking上发送,作为一个数据库存储只传输id和数据生活在服务器上。
FWIW,rails 3.1build议运行
rails generate session_migration
然而,这会产生完全相同的迁移
rake db:sessions:create
Rails默认对我来说似乎相当不错,CookieStore速度很快,应该覆盖大部分用例。 当然你的数据限制在4kb,你的数据对用户是可见的,但是Rails的方式是只使用会话来处理整数ID和基本string值等事情 – 如果你想在会话中存储对象或高度机密的信息你可能做错了。