【问题标题】:Migrate session from active record store to cookie store将会话从活动记录存储迁移到 cookie 存储
【发布时间】:2013-05-07 21:43:47
【问题描述】:

Rails 4 将包含基于加密 cookie 的会话。我们想从活动记录 cookie 存储更改为该存储。有没有办法在不打扰我的应用程序客户的情况下做到这一点?我不想删除所有当前会话。

【问题讨论】:

  • 请问您为什么要这样做?根据 rails 安全指南guides.rubyonrails.org/security.html,您应该避免将大对象存储在 cookie 中。 => 好的,它现在是安全的,但你应该避免制作大的 cookie。所以,对我来说,即使你使用加密的 cookie,也要继续使用活动记录会话。

标签: ruby-on-rails session-cookies


【解决方案1】:

同意 Nathan 的观点,除非您因为会话存储而担心数据库性能,否则不要倒退。在这种情况下,我建议为您的会话而不是基于 cookie 的 Redis 或 Memcached 存储。

【讨论】:

    【解决方案2】:

    还有一个问题。我尝试从活动记录迁移到 cookie 存储,现在每个用户都会收到“我们很抱歉,但出了点问题”错误。解决方案是清除 cookie,但我必须告诉每个用户。他们中的许多人会认为该网站已损坏。所以这很糟糕。而且如果不能联系到每一位用户,那就太糟糕了。

    【讨论】:

      【解决方案3】:

      这是可行的,我只是以另一种方式做的(出于我不会深入讨论的原因,我们需要将它们放在数据库中)。在应用程序控制器中,像这样放置一个前置过滤器:

      prepend_before_filter :migrate_session
      
      def migrate_session
        # migrating over old sessions
        session_model = YourSessionModel.find_by_session_id(session.id)
        if session_model
          data = session_model.data
          data.each do |key,value|
            session[key] = value
          end
          session_model.destroy
        end
      end
      

      进入会话哈希的所有内容都将保存在 cookie 中。在您不再有任何活动记录会话后,您可以摆脱此代码。

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 1970-01-01
        • 2012-07-13
        • 2021-01-04
        • 2020-12-26
        • 1970-01-01
        • 2018-10-06
        • 2014-10-06
        • 1970-01-01
        相关资源
        最近更新 更多