何时使用cookie store vs redis store for session cookie

时间:2018-04-26 05:41:13

标签: ruby-on-rails session-cookies

在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商店?什么时候应该使用数据库?

2 个答案:

答案 0 :(得分:1)

  • 当您需要在会话中存储超过 4KB 的数据时。

  • 当您需要对到期会话进行更多控制时。这是您可能需要这种控制的两个示例:

    1. 如果您对应用进行更改时需要在会话中添加新信息,或者存在安全漏洞,并且您需要使所有会话失效,以便所有用户都需要再次登录,则会话变得容易得多住在数据库中,而不需要更改secret_key_base以使cookie_store会话无效。
    2. 维护的会话是攻击者将会话无限期保持有效的状态。这里https://guides.rubyonrails.org/security.html#session-expiry提到了问题,如果您想防止维护的会话,可以通过在会话上设置created_at属性而不是使用{ {1}}会话,因为每次请求都会重新创建该会话。

答案 1 :(得分:0)

如果在集群(多个服务器)环境或会话数据上运行的rails应用程序超过4KB(cookie存储限制为4KB内存),则使用Redis或任何其他数据库。