我有一个有趣的案例。我正在为Rails 2.3应用程序制定白色标记功能,并且在设置动态会话域方面存在问题。

因此,每个白色标签都应拥有自己的域:company1.com,company2.com,company3.com。他们每个人都应该支持子域并在其中分享会话。

IE test1.company1.com,test2.company1.com,company1.com <=应该分享一个共同的会话; test1.example.com,example.com <=应该共享一个常见的会话,但与company1.com不同。

在常见情况下(对于单个基本域),它以这种方式完成:

file:production.rb
config.action_controller.session[:domain] = '.company1.com'

如果我想支持多个域,我将必须基于访问的站点域动态设置此配置选项。我目前正在尝试以这种方式完成它:

file:environment.rb
require 'dispatcher'
module ActionController
  class Dispatcher
    def set_session_domain
      tld_size = SubdomainFu.tld_size+1
      host_name = @env['HTTP_HOST'].split('.')[-tld_size,tld_size].join('.')
      ActionController::Base.session = { :domain => ".#{host_name}" }
    end
    before_dispatch :set_session_domain
  end
end

但是上面的代码不起作用。

您是否成功地做了类似的事情,或者您知道问题/解决方案可能在哪里?

预先感谢您的时间

有帮助吗?

解决方案

使用ActionController :: Base.Session无法正常工作,因为仅在初始化机架中间件处理会话时才使用,因此仅在启动应用程序时才使用。为了使上述代码工作,您应该使用

@env['rack.session.options']

在这里查看一个例子:

http://railsforum.com/viewtopic.php?id=41306

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top