【问题标题】:Configuring Rails App to handle multiple subdomains and multiple cookies配置 Rails 应用程序以处理多个子域和多个 cookie
【发布时间】:2011-08-27 00:53:12
【问题描述】:

我有一个支持多个域的 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 的好方法?

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

【问题讨论】:

  • 你试过了吗?这应该不是问题,因为 cookie 仅对设置它们的域有效。我有类似的设置,没有问题。
  • 我还没有在现场设置中尝试过......我需要编辑我的问题,因为还有更多问题。

标签: ruby-on-rails ruby-on-rails-3 cookies session-cookies actiondispatch


【解决方案1】:

你应该这样做:

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'

即您的域应以点开头。

【讨论】:

  • 我不能只指定一个域 - 应用程序应该支持许多域和许多子域
  • 然后你应该创建自定义会话存储。查看更新的答案
  • 啊——这就是我要找的东西!
【解决方案2】:

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

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

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

【讨论】:

  • 问题是我希望 cookie 在每个子域之间共享 - 但不是每个域。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2017-08-21
  • 2014-06-27
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多