4

我有一个支持多个域的rails应用程序,每个域可能有多个子域。配置Rails应用程序来处理多个子域和多个Cookie

用户访问mydomain1.com没有收到相同的体验mydomain2.com(尽管应用程序的基本行为是一样的)

因此,如果用户登录到mydomain1.com,它不该“T则可以登录到mydomain2.com

如果用户登录到france.mydomain1.com,它应该然后在此之前记录到germany.mydomain1.com

,我已经通过在会话存储配置中设置域来处理此问题:

MyApp::Application.config.session_store :cookie_store, :key => '_MyApp_session', :domain => APP_CONFIG[:domain] 

我试图找出最好的方法来处理这与多个域?

我试过在ActionDispatch::Callback附近试过黑客,但是这个请求在那里没有。

任何人都可以提出一种从一个应用程序中支持多个cookie的好方法吗?

理想情况下,我想为每个子域创建一个新的Cookie。

+0

你试过了吗?它不应该是一个问题,因为cookie只对设置它们的域有效。我有一个类似的设置,没有问题。 – Wukerplank 2011-05-17 08:17:34

+0

我还没有尝试过它在现场设置呢......我需要编辑我的问题,因为还有更多的问题。 – bodacious 2011-05-17 08:25:01

回答

5

你应该做的:

class ActionDispatch::Session::MultiDomainStore < ActionDispatch::Session::CookieStore 
    def initialize(app, options = {})  
    super(app, options.merge!(:domain => compute_domain(app)))  
    end 

    def compute_domain(app) 
    ... 
    end 
end 

MyApp::Application.config.session_store :multi_domain_store, :key => '_MyApp_session' 

即你的域名应该以点开头。

+0

我无法指定一个域 - 该应用程序应该支持许多域和许多子域 – bodacious 2011-05-17 16:01:49

+0

然后,您应该创建自定义会话存储。 查看最新答案 – Anton 2011-05-17 18:52:43

+0

啊 - 那就是我一直在寻找的! – bodacious 2011-05-17 21:36:47

1

它不应该是一个问题,因为cookie只对每个域有效。 example1.com可以有_MyApp_sessionexample2.com可以有_MyApp_session。 Cookie由浏览器管理,只有在域匹配时才发送给主机。

假设您访问example1.com并登录,您将获得一个值为abcdef123的cookie。然后你登录example2.com,你会得到一个随机字符串uvwxyz890的另一个cookie。

如果稍后返回到example1.com,浏览器将只会将对该域有效的cookie发送到您的应用程序。你的应用程序不需要管理任何东西,也不需要破解任何东西。

+0

问题是我要在每个子域中共享Cookie _want_,但不是每个域。 – bodacious 2011-05-17 09:00:14

相关问题