在rails 3和rails 4.1之间共享cookie

我想在Rails 3和Rails 4.1应用程序之间共享cookie。 问题是Rails 3 cookie只是base64编码,但Rails 4.1 cookie是加密的。

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

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

要使这个工作unset 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' 

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

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

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