【问题标题】:Using different redis stores for session and caching in Rails 5在 Rails 5 中使用不同的 redis 存储进行会话和缓存
【发布时间】:2019-01-14 00:25:19
【问题描述】:

我是 Ruby 和 Rails 的新手。我正在使用 Ruby on Rails 5.2 构建一个 Web 应用程序。我已将其配置为使用redis-cache-store 来管理视图缓存:

config.cache_store = :redis_cache_store, { driver: :hiredis, namespace: "my-app", compress: true, url: ENV["REDIS_URL"] }

我已将会话存储配置为:

Rails.application.config.session_store :cache_store, {
  key: "sid",
  expire_after: 30.minutes
}

所以我在这里使用:cache_store 作为我的会话存储。据我了解,这意味着视图缓存和会话数据的条目存储在同一个 Redis 数据库中。

据我了解,如果使用 Rails 5.2,则不再需要 redis-rails gem,因为它内置了对 redis 的支持 - https://github.com/redis-store/redis-rails#a-quick-note-about-rails-52。因此,我没有使用过那个宝石。

有没有办法为会话使用不同的 redis 存储并为视图缓存使用不同的存储?

或者我是否正在尝试做一些在 Rails-land 中不寻常的事情?

【问题讨论】:

    标签: ruby-on-rails ruby redis ruby-on-rails-5


    【解决方案1】:

    要单独配置会话存储以使用 Redis,您需要使用提供 Redis 会话存储的 gem:redis-store(注意 redis-activesupport 已弃用,但 redis-actionpack 不是),或 @ 987654325@.

    您不能在使用 :cache_store 会话存储时单独配置会话存储,因为它将会话存储在实际缓存中...它不仅仅是“类似缓存”的存储,所以它不能覆盖/行为与缓存本身不同。

    将会话内容存储在 cookie 以外的地方有点不寻常,因为会话 cookie 已加密且防篡改,但这种情况并不少见。如果你打算这样做,Redis 是一个不错的选择。

    【讨论】:

    • 将会话内容存储在 cookie 以外的地方有点不寻常,因为会话 cookie 已加密且防篡改。它会阻止session replay attacks 吗?
    • “将会话内容存储在 cookie 以外的地方有点不寻常,因为会话 cookie 已加密且防篡改,但这种情况并不少见。”它允许您显示用户登录的位置以及使登录会话无效(注销)。
    猜你喜欢
    • 2021-05-22
    • 2019-05-13
    • 1970-01-01
    • 2012-04-28
    • 2015-06-18
    • 2017-12-22
    • 1970-01-01
    • 2017-02-27
    • 2016-08-28
    相关资源
    最近更新 更多