如何使用Rails 2.3.8在子域之间共享会话

时间:2010-09-18 22:36:41

标签: ruby-on-rails subdomain authenticity-token

我发现了许多描述如何执行此操作的帖子。它们看起来就像把它放在适当的环境配置文件中一样:

config.action_controller.session[:domain] = '.localhost'

但是,如果我这样做,那么尝试登录(我正在使用设计)将失败:

ActionController::InvalidAuthenticityToken

我看到其他人发布了相同的问题(提供设置会话[:域名]的建议的各个博客的评论部分)但是我没有找到任何人回答关于为什么会发生这种情况的问题的案例。如何解决它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不确定这是否与您的问题有关,但您是否尝试将会话域设置为'.localhost'?这不会有效,因为它实际上是您尝试为其设置Cookie的顶级域名。

请参阅http://www.ruby-forum.com/topic/181650#794923

答案 1 :(得分:1)

我在config / initializers / set_session_domain.rb中有这个片段:

module ActionControllerExtensions
  def self.included(base)
    base::Dispatcher.send :include, DispatcherExtensions
  end

  module DispatcherExtensions
    def self.included(base)
      base.send :before_dispatch, :set_session_domain
    end

    def set_session_domain
      domain = @env['HTTP_HOST'].gsub(/:\d+$/, '').gsub(/^[^.]*/, '')
      @env['rack.session.options'].update :domain => domain
    end
  end
end

ActionController.send :include, ActionControllerExtensions

一切都很好。