Rails Rails 在用 redis 作为缓存的时候,使用 chrome 浏览器的时候每次请求都会创建一个新的 session,导致无法登陆网站

pingbro · 2018年04月26日 · 最后由 pingbro 回复于 2018年04月27日 · 1621 次阅读

浏览器版本:Chrome 66.0

config/application.rb 以及 config/initializers/session_store.rb redis 相关的配置代码

# config/application.rb
config.cache_store = :redis_store, {
  host: "127.0.0.1",
  port: 6379,
  db: 0,
  namespace: "cache"
},{ expire_after: 1.day }

# config/initializers/session_store.rb
Rails.application.config.session_store :redis_store, {
  servers: [
    {
      host: "127.0.0.1",
      port: 6379,
      db: 0,
      namespace: "session"
    },
  ],
  expire_after: 120.minutes,
  key: "_myblog_session"
}

我先在 redis 客户端清除所有缓存,之后登陆网站 登陆成功后重定向到 admin 后验证不通过又跳转回了登陆页面

然后查看 redis 缓存发现有三个 session(对应上面的三个请求)

127.0.0.1:6379> keys *
1) "session:12dfe4c83baa718c4f3ce49d50314305"
2) "session:4ae34a24c1aa9c32da7a7a5879c7f480"
3) "session:489390f1be352195b4b9d1ef6880ee43"

目前只有 Chrome 浏览器会出现这个情况

测试 safari 浏览器是正常的,重启电脑后前期有一段时间是正常的,使用 rails 默认缓存的时候也是正常的

请问各位大佬这是什么情况,有没有遇到过类似的问题?

https://github.com/roidrage/redis-session-store

帮楼主找点线索

But why, you ask, when there's redis-store? 
redis-store is a one-size-fits-all solution, 
and I found it not to work properly with Rails,
mostly due to a problem that seemed to lie in Rack's Abstract::ID class. 
lithium4010 回复

非常感谢

pingbro 关闭了讨论。 04月27日 10:34
需要 登录 后方可回复, 如果你还没有账号请 注册新账号