2010-12-16 170 views
2

我有一个有趣的案例。我正在为Rails 2.3应用程序开发白标签功能,并且在设置动态会话域时遇到问题。Rails:动态会话域和子域之间的共享会话

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

I.e. 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 

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

你有没有做过类似的事情,或者你有什么想法可以解决问题/解决方案?

预先感谢您的宝贵时间

+0

我能得到这个代码的工作。你能指出什么不工作?您是否尝试在每个步骤的日志中打印“#{host_name}”以查看您是否设置了正确的值?我的猜测是,您没有为:domain选项设置适当的值。 – 2010-12-16 22:56:57

回答

2

使用的ActionController :: Base.session是行不通的,因为初始化机架中间件处理会话时,才使用启动您的应用程序,因此,只有当。为了使上面的代码工作,你应该使用

@env['rack.session.options'] 

看看这里的一个例子:

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

+0

10x为例! – 2011-07-26 17:07:39