Luk*_*kas 82 ruby cookies session ruby-on-rails
任何人都有任何关于Rails和会话的"最佳实践"技巧?Rails 3的默认会话类型仍然是CookieStore,对吧?我使用SqlSessionStore已经有一段时间了,它运行良好,但我可能会偏离它,转而支持CookieStore.
将CookieStore用于敏感信息仍然不是一个好主意,即使是盐渍信息,还是更好地存储在数据库中?
小智 102
将数据库用于会话而不是基于cookie的默认值,不应将其用于存储高度机密的信息
使用创建会话表
rake db:sessions:create
Run Code Online (Sandbox Code Playgroud)
运行迁移
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
确保您也告诉rails使用ActiveRecord来管理您的会话.
配置/初始化/ session_store.rb:
Rails.application.config.session_store :active_record_store
Run Code Online (Sandbox Code Playgroud)
到config/environment.rb:
config.action_controller.session_store = :active_record_store
Run Code Online (Sandbox Code Playgroud)
小智 50
在Rails 4中,CookieStore cookie是默认加密和签名的:
如果您只
secret_token
设置了,您的cookie将被签名,但不会加密.这意味着用户无法在user_id
不知道应用程序密钥的情况下更改自己的密钥,但可以轻松阅读user_id
.这是Rails 3应用程序的默认设置.如果您已
secret_key_base
设置,您的cookie将被加密.这比签名cookie更进一步,因为加密的cookie不能被用户更改或读取.这是Rails 4中的默认开头.如果您同时设置
secret_token
和secret_key_base
设置,您的cookie将被加密,并且Rails 3生成的签名cookie将被透明地读取和加密,以提供平滑的升级路径.
对于Rails 4,这个答案现在已经过时了.活动记录会话存储已被弃用并从Rails中删除,因此以下生成器将不再起作用:
rake db:sessions:create
rails generate session_migration
这个答案指出了这一点.不推荐使用Active Record Session Store的原因是,当您有大量用户访问您的应用程序时,对数据库的读/写操作不能很好地扩展,如本博客文章所述:
... Active Record会话存储的一个主要问题是它不可扩展.它会给您的数据库带来不必要的负担.一旦您的应用程序收到大量流量,会话数据库表将继续受到读/写操作的轰炸.
从Rails 4开始,Active Record会话存储已从核心框架中删除,现在已弃用.
如果您仍想使用Active Record会话存储,它仍可作为gem使用.
对于Ruby on Rails会话的更新当前最佳实践,我建议您查看最新版本的Ruby on Rails安全指南.
我不相信任何平台上的任何人应该如何处理基于cookie的会话有任何改变.对超出服务器控制范围的任何事情持怀疑态度(cookie,表格帖子等)这是Web开发的一般原则.
至于加密,我不知道在这方面是否有任何改变.
使用cookie存储需要注意的是数据量的限制,以及在每个请求中将这些数据发送到线上的问题,因为数据库存储只传输id和数据存在于服务器上.
归档时间: |
|
查看次数: |
44964 次 |
最近记录: |