Question

J'ai un cas intéressant. Je travaille sur la fonctionnalité de marquage blanc pour une application Rails 2.3 et ont des problèmes avec la mise en place des domaines de session dynamiques.

Ainsi, chaque marque blanche devrait avoir propre domaine: company1.com, company2.com, company3.com. Plus sur chacun d'entre eux devrait avoir un support pour les sous-domaines et le partage de la session entre eux.

i.e.. test1.company1.com, test2.company1.com, company1.com <= devrait partager une session commune; test1.example.com, example.com <= devrait partager une session commune mais différente de company1.com.

Dans le cas commun (pour un seul domaine de base), il est fait de cette façon:

file:production.rb
config.action_controller.session[:domain] = '.company1.com'

Si je veux soutenir plusieurs domaines, je vais devoir définir cette option de configuration dynamiquement en fonction du domaine du site accessible. J'essaie actuellement d'accomplir de cette façon:

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

Cependant, le code ci-dessus ne fonctionne pas.

Avez-vous fait quelque chose de similaire avec succès ou avez-vous une idée où le problème / solution pourrait être?

Merci d'avance pour votre temps

Était-ce utile?

La solution

Utilisation ActionController :: Base.session ne va pas au travail, car il est utilisé uniquement lors de l'initialisation du middleware rack manipulation des sessions, donc que lors du démarrage de votre application. Afin de rendre le travail de code ci-dessus, vous devez utiliser

@env['rack.session.options']

Jetez un coup d'oeil ici pour un exemple:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top