在Rails中,存储session
的默认值是使用cookie_store
。
Application.config.session_store :cookie_store, key: '_myapp_session'
但是有时,session
存储在数据库中,例如Redis。
Application.config.session_store(
:redis_store,
servers: config.redis_server,
key: '_myapp_sessions',
)
我们什么时候应该使用cookie商店,什么时候应该使用数据库?
-
当您需要在会话中存储数据超过 4KB 。
-
当您需要更多地控制到期会议时。这是您可能需要这种控制的两个示例:
- 如果您更改需要在会话中需要新信息的应用程序或有安全漏洞,并且您需要过期所有会话,以便所有用户都需要再次登录,那么如果会话会更容易活在数据库与需要更改
secret_key_base
以使cookie_store
会话无效的数据库中。 - A 维护的会话是攻击者无限期地将会话保持活力的地方。这里提到了这个问题https://guides.rubyonrails.org/security.html#session-dexpiry,如果您想防止维护的会话通过设置
created_at
attribute,可以轻松地使用数据库来完成此操作。在会话中而不是cookie_store
会话中,因为它会通过每个请求重新创建。
- 如果您更改需要在会话中需要新信息的应用程序或有安全漏洞,并且您需要过期所有会话,以便所有用户都需要再次登录,那么如果会话会更容易活在数据库与需要更改
如果您在群集(多个服务器(环境或会话数据上运行的导轨应用超过4KB(Cookie Store的限制为4KB内存(,然后使用REDIS或任何其他数据库。