Rails会议当前的做法

时间:2010-04-06 20:54:31

标签: ruby-on-rails ruby session cookies

任何人都有任何针对Rails和会话的“最佳做法”提示? Rails 3的默认会话类型仍然是CookieStore,对吧?我使用SqlSessionStore已经有一段时间了,它运行良好,但我可能会偏离它,转而支持CookieStore。

将CookieStore用于敏感信息仍然不是一个好主意,即使是使用盐腌信息还是更好地存储在数据库中?

5 个答案:

答案 0 :(得分:102)

将数据库用于会话而不是基于cookie的默认值,不应将其用于存储高度机密的信息

使用

创建会话表
rake db:sessions:create

运行迁移

rake db:migrate

确保您也告诉rails使用ActiveRecord来管理您的会话。

Rails 3

配置/初始化/ session_store.rb:

Rails.application.config.session_store :active_record_store

Rails 2

配置/ environment.rb中:

config.action_controller.session_store = :active_record_store

答案 1 :(得分:49)

Cookie在Rails 4

中默认加密

在Rails 4中,CookieStore Cookie默认为加密和签名:

  

如果您只设置了secret_token,那么您的Cookie将被签名,但不会   加密。这意味着用户无法在不知道您的情况下更改user_id   应用程序的密钥,但可以轻松阅读他们的user_id。这是默认值   对于Rails 3应用程序。

     

如果您设置了secret_key_base,您的Cookie将被加密。这是一个   比签名的cookie更进一步,因为加密的cookie不能被更改   或由用户阅读。这是Rails 4中的默认开始。

     

如果同时设置了secret_tokensecret_key_base,那么您的Cookie就会出现   加密,Rails 3生成的签名cookie将是透明的   读取并加密以提供平滑的升级路径。

活动记录会话存储在Rails 4中不推荐使用

关于Rails 4,

This answer现已过时。活动记录 会话存储已被弃用并从Rails中删除,因此如下 发电机将不再起作用:

  • rake db:sessions:create

  • rails generate session_migration

this answer指出了这一点。积极记录的原因 不推荐使用会话存储是因为对数据库的读/写不是 当您有大量用户访问您的应用程序时,可以很好地扩展 在this blog post中说明:

  

... Active Record会话存储的一个主要问题是它不是   可扩展性。它会给您的数据库带来不必要的负担。一旦你的申请   接收大量流量,会话数据库表是   不断受到读/写操作的轰炸。

     

从Rails 4开始,Active Record会话存储已从核心中删除   框架,现已弃用。

如果您仍想使用Active Record会话存储,it's still available as a gem

当前Rails会话最佳实践

对于Ruby on Rails会话的更多当前最佳实践,我建议你 查看最新版本的Ruby on Rails Security Guide

答案 2 :(得分:9)

我不相信任何平台上的任何人应该如何处理基于cookie的会话。对超出服务器控制范围的任何事情持怀疑态度(cookie,表格帖子等)这是网络开发的一般原则。

就加密而言,我不知道在这方面是否有任何改变。

使用cookie存储需要注意的是数据量的限制,以及在每个请求中将这些数据发送到线上的问题,因为数据库存储只传输id和数据生命在服务器上。

答案 3 :(得分:4)

FWIW,rails 3.1建议运行

rails generate session_migration

然而,这会产生与

完全相同的迁移
rake db:sessions:create

答案 4 :(得分:2)

Rails默认值对我来说似乎相当不错--CookieStore很快,应该涵盖大多数用例。当然,你的数据限制在4kb,用户可以看到你的数据,但是Rails方式只是使用会话来处理整数ID和基本字符串值等事情 - 如果你试图在会话中存储对象或高度机密的信息你可能做错了。