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_tokensecret_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值等事情 – 如果你想在会话中存储对象或高度机密的信息你可能做错了。