Rails: динамический сеансовый домен и общий сеанс между поддоменами - PullRequest
3 голосов
/ 16 декабря 2010

У меня интересный случай. Я работаю над функциональностью «белой маркировки» для приложения Rails 2.3, и у меня проблемы с настройкой динамических доменов сеансов.

Таким образом, каждая белая метка должна иметь собственный домен: company1.com, company2.com, company3.com. Более того, у каждого из них должна быть поддержка поддоменов и разделение сеанса между ними.

т.е. test1.company1.com, test2.company1.com, company1.com <= должны совместно использовать общий сеанс; test1.example.com, example.com <= должен использовать общий сеанс, но отличается от company1.com. </p>

В общем случае (для одного базового домена) это делается следующим образом:

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

Однако приведенный выше код не работает.

Успешно ли вы сделали что-то подобное или у вас есть идея, где может быть проблема / решение?

Заранее спасибо за ваше время

1 Ответ

2 голосов
/ 14 июля 2011

Использование ActionController :: Base.session не будет работать, поскольку оно используется только при инициализации промежуточного программного обеспечения стойки, обрабатывающего сеансы, и, следовательно, только при загрузке приложения.Для того, чтобы приведенный выше код работал, вы должны использовать

@env['rack.session.options']

Посмотрите здесь пример:

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

...