2009-03-19 15 views
5

Ho un app 2.2.3, che ho aggiornato a 2.3.2Perdere sessione rotaie 2.3.2 applicazione utilizzando sottodominio

Si tratta di un multi-sito (utilizzando sottodominio) che crea una sessione di alto livello per tutti i siti.

Questo è il modo a cambiare il dominio in production.rb:

ActionController::Base.session_options[:domain] = "example.com" 

# in rails 2.2.2, this is what i used to do: 
# ActionController::Base.session_options[:session_domain] = "example.com" 

Strane cose hanno cominciato ad accadere dopo che ho aggiornato non posso più accedere utilizzando l'autenticazione riposante; mi autentica, ma non appena viene reindirizzato, mi chiede di accedere di nuovo.

Come ho detto, uso restful_authentication e uso anche passeggero 2.1.2. Qualcuno può aiutare?

+0

è la risposta del Vlad corretta? – MickaelFM

risposta

1

È necessario indicare:

.example.com 

(notare la leader dot) in modo che il cookie di sessione da applicare a example.com così come i suoi sottodomini.

-1

Ho avuto lo stesso problema con le sessioni basate sui cookie. L'aggiornamento a Passenger 2.1.3 sembrava risolvere il problema.

+0

questo è un altro problema –

0

abbiamo avuto lo stesso problema (perdere sessioni, senza sottodominio), con nginx + thin. La migrazione ad apache + passenger (ultima versione) ha risolto il problema.

3

in Rails 2.3 si dovrebbe usare

config.action_controller.session[:domain] = '.example.com' 
+0

Ho provato a metterlo in sviluppo.rb e ho ottenuto: metodo undefined '[] = 'per nil: NilClass –

+0

Ahh! Capito. La variabile di sessione non era ancora stata creata. Questo ha funzionato: config.action_controller.session = {: dominio => '.esempio.com'} –

7

risposta di Olly è corretta, in Rails 2.3 che dovrebbe essere:

config.action_controller.session[:domain] = '.example.com' 

Volevo solo aggiungere che se non si dispone già di un certo opzioni di sessione create potresti ricevere questo quando usi quello:

undefined method `[]=' for nil:NilClass 

In questo caso dovresti usare questo nstead (che crea la variabile di sessione, invece di aggiornarlo):

config.action_controller.session ||= {} 
config.action_controller.session[:domain] = '.example.com' 

Edit: Rotaie apparentemente 2.2.2 progetti utilizzano qualcosa di diverso. "domain" dovrebbe essere chiamato "session_domain" e prendere il carattere di periodo dalla parte anteriore del dominio. Prova questo:

config.action_controller.session ||= {} 
config.action_controller.session[:session_domain] = 'example.com' 
+0

Impressionante, stava ottenendo quell'errore esatto e ora può risolvere: D – nitecoder

+0

Questo è stato utile per me per impostare sessioni sicure. – anonmys

1

Volevo solo dire che un altro modo per gestire l'intera sottodominio per i cookie è dinamico. Funziona in 2.3.4.

Qualcosa di simile nel environment.rb

# solution to use the cookies in the api. domains 
# this is relevant but in 2.3.4 the code is different 
# http://szeryf.wordpress.com/2008/01/21/cookie-handling-in-multi-domain-applications-in-ruby-on-rails/ 
# Just making sure that api. shares the domain name 
require 'dispatcher' 
module ActionController 
    class Dispatcher 
    def set_session_domain 
     host_name = @env['SERVER_NAME'] 
     new_host_name = whatever #some mod of the host_name, for instance 
     ActionController::Base.session = { 
     :domain => new_host_name 
     } 
    end 

    before_dispatch :set_session_domain 
    end 
end 
1

sto correndo Rails 2.3.5 e hanno

config.action_controller.session = {:domain => '.localhost:3000'} 

nel mio development.rb ma io non farlo funzionare ?

Qualcos'altro che devi fare?

2

Una soluzione più a prova di proiettile sarebbe quella di verificare se la sessione esiste già o meno. Se stai sostituendo ciecamente l'intero oggetto della sessione, questo potrebbe farti inciampare in futuro.

if ActionController::Base.session 
    ActionController::Base.session[:domain] = '.example.com' 
else 
    ActionController::Base.session = { :domain => '.example.com' } 
end 

Mi piace farlo in un file di inizializzazione.

0

Sono in corso anche 2.3.5 e incontrando problemi simili a @ Alfred-nerstu

Nessun messaggio di errore con la patch dal @schickm ma non sembra prendere, sia.

0

Si potrebbe aggiungere nello stesso luogo in cui si imposta la chiave di sessione e segreta

config.action_controller.session = { 
     :key => '_app_session', 
     :domain => '.domain.com', 
     :secret => 'secret' 
} 
Problemi correlati