在rails 3和rails 4.1之间共享cookie

时间:2014-07-07 17:37:39

标签: ruby-on-rails ruby-on-rails-3 cookies ruby-on-rails-4 base64

我正在尝试在Rails 3和Rails 4.1应用之间共享Cookie。问题是Rails 3 cookie只是base64编码,但Rails 4.1 cookie是加密的。

有没有办法让Rails 3和Rails 4.1使用兼容的cookie?

目前最简单的方法似乎是降级到Rails 4.0

2 个答案:

答案 0 :(得分:6)

要使此工作取消设置secret_key_base,而是使用您在Rails 3应用中使用的secret_token。然后诀窍是设置action_dispatch.cookies_serializer = :marshal。否则Rails 4以Rails 3无法读取的格式存储cookie。

所以我的最终config / initializers / session_store.rb有

Rails.application.config.action_dispatch.cookies_serializer = :marshal
Rails.application.config.secret_token = 'verylongstring'

答案 1 :(得分:0)

您是否尝试取消设置secret_key_base并将secret_token设置为您在Rails 3应用中使用的相同值?这可能不起作用,但我没有在4.1升级指南中看到任何内容,表明它不会。

如果这不起作用,我可以想到的选项:

  1. 切换到其他会话存储(Memcached,ActiveRecord,等等)。不理想,因为它意味着更多的基础设施,但它应该工作。
  2. 编写自己的cookie中间件。如果真的需要在多个应用程序之间共享cookie信息,这是您最好的长期解决方案。不要依赖于预先构建的Rails内容,因为(正如您所发现的那样)很难保持同步。编写您自己的便携式Rack中间件,并完全按照您的需要进行操作。