4

我有一个支持多个域的 Rails 应用程序,每个域可能有多个子域。

访问 mydomain1.com 的用户不会获得与 mydomain2.com 相同的体验(尽管应用程序的基本行为相同)

因此,如果用户登录到 mydomain1.com,则不应再登录到 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 的好方法吗?

理想情况下,我想为每个subdomain创建一个新的 cookie 。

4

2 回答 2

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'

即您的域应该以点开头。

于 2011-05-17T11:49:45.503 回答
1

这应该不是问题,因为 cookie 仅对每个域有效。你可以有一个_MyApp_sessionforexample1.com和一个 for example2.com。cookie 由浏览器管理,只有在域匹配时才会发送到主机。

假设您访问 example1.com 并登录,您将获得一个带有 value 的 cookie abcdef123。然后您登录 example2.com,您将获得另一个带有随机字符串的 cookie uvwxyz890

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

于 2011-05-17T08:40:30.567 回答