Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在Rails2和Rails3应用程序之间共享会话_Ruby On Rails 3_Ruby On Rails 2 - Fatal编程技术网

Ruby on rails 3 在Rails2和Rails3应用程序之间共享会话

Ruby on rails 3 在Rails2和Rails3应用程序之间共享会话,ruby-on-rails-3,ruby-on-rails-2,Ruby On Rails 3,Ruby On Rails 2,我想使用会话cookie存储在Rails 2.3.14应用程序和Rails 3.0.10应用程序之间共享会话 我发现了一篇优秀的博客文章,解释了如何设置: 在Rails2将会话键存储为符号,而Rails3存储为字符串的问题出现之前,一切都很正常。此外,还提供了修补程序来修复此问题: # lib/patches/cgi/session.rb require 'cgi/session' class CGI #:nodoc: class Session #:nodoc: def [](

我想使用会话cookie存储在Rails 2.3.14应用程序和Rails 3.0.10应用程序之间共享会话

我发现了一篇优秀的博客文章,解释了如何设置:

在Rails2将会话键存储为符号,而Rails3存储为字符串的问题出现之前,一切都很正常。此外,还提供了修补程序来修复此问题:

# lib/patches/cgi/session.rb
require 'cgi/session'

class CGI #:nodoc:
  class Session #:nodoc:
    def [](key)
      @data ||= @dbman.restore
      @data[key.to_s]
    end

    def []=(key, val)
      @write_lock ||= true
      @data ||= @dbman.restore
      @data[key.to_s] = val
    end
  end
end
这个博客是2010年发布的,看起来这个补丁已经不再适用于Rails2.3.14应用程序了。我还读到CGI真的不推荐使用,所以我想知道这个补丁是否仍然是解决这个问题的正确方法

如何确保Rails2和Rails3对会话密钥使用相同的数据类型,有什么建议吗?

模块操作控制器
module ActionController
  module Session
    class AbstractStore
      class SessionHash < Hash
        def [](key)
          load_for_read!
          super(key.to_s)
        end

        def []=(key, val)
          load_for_write!
          super(key.to_s, val)
        end
      end
    end
  end
end
模块会话 类抽象存储 类SessionHash
或者,如果您希望修改2.3.8,可以将其添加到config/initializers/session_store.rb

module ActionController::Session
  class AbstractStore
    class SessionHash < Hash
       def [](key)
         load! unless @loaded
         super(key.to_s)
       end

       def []=(key, value)
         load! unless @loaded
         super(key.to_s, value)
       end
    end
  end
end
模块操作控制器::会话
类抽象存储
类SessionHash
使用Rails 2或Rails 3应该没有区别,因为Cookie在浏览器中存储为字符串(文本文件)。使用符号或字符串获取/设置值并不重要。序列化可能已从2更改为3。你不能尽可能使用原始的方法吗?