2

我正在寻找一种在 Ruby on Rails 应用程序中使用基于内存的会话存储的方法。会话包含一个只有在用户登录时才能解密的主密钥。这个密钥应该在整个会话期间都可用。

由于此密钥的性质,会话的内容不应存储在本地的任何地方。此外,我不想将内容传输到任何外部应用程序,例如 memcached。

因此,是否可以只使用类似于 PHP 或 Java SE 的基于内存的会话存储?

4

3 回答 3

7

导轨 5

从版本 5 开始,Rails 不再config/initializers/session_store.rb在安装时创建文件。

在 Rails 5 中,默认会话存储是在内部设置的(到 cookie 存储),不再像 Rails 4 那样通过应用程序初始化程序。https://github.com/rails/rails/issues/25181

在纯 Rails 5 应用程序(= 未迁移)中,要更改会话存储,例如从:cookie_storeto :cache_store,您必须自己创建config/initializers/session_store.rb文件,然后添加相关指令:

# Be sure to restart your server when you modify this file.
Rails.application.config.session_store :cache_store, key: '_your_app_session'

请注意,您将需要更改密钥'_your_app_session'以匹配您的应用程序名称(如果您的应用程序被命名calculator,那么应该是'_calculator_session')......

于 2017-05-28T16:35:01.743 回答
3

您可以使用 aCacheStore将会话数据存储在内存中。

# /config/initializers/session_store.rb
AppName::Application.config.session_store :cache_store

或者您可以编写自己的SessionStore类:

http://guides.rubyonrails.org/configuring.html#rails-general-configuration

于 2016-01-02T14:13:08.270 回答
0

您可以使用MemoryStore,但这是一种非常糟糕的做法,因为它不在机器之间共享,因此您的应用程序将无法扩展。
从安全的角度来看,没有真正的理由不应该将此密钥传输到外部 memcached 或 redis。
您应该保护整个生产基础设施,加密服务器之间的任何数据交换,或者将它们放在受信任的网络中,充分利用防火墙并遵循最佳实践。你的缓存服务器应该和你的应用服务器或数据库一样安全,没有任何借口。

于 2016-01-02T15:35:05.423 回答