2009-03-19 12 views
5

Tengo una aplicación 2.2.3, que he actualizado a 2.3.2La pérdida de la sesión en los carriles 2.3.2 aplicación usando subdominio

Es un multi-sitio (usando subdominio) que crea una sesión de alto nivel para todos los sitios.

Así es como puedo cambiar el dominio en 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" 

cosas extrañas comenzaron a suceder después de actualizar ya no puedo iniciar sesión con la autenticación de descanso; me autentica, pero tan pronto como me redirijan, me pediría que vuelva a iniciar sesión.

Como dije, utilizo restful_authentication y también uso passenger 2.1.2. ¿Alguien puede ayudar?

+0

es la respuesta de la Vlad correcta? – MickaelFM

Respuesta

1

Se debe indicar:

.example.com 

(notar la punto inicial) para que la cookie de sesión aplicar a example.com , así como sus subdominios.

-1

Tuve el mismo problema con las sesiones basadas en cookies. La actualización a Passenger 2.1.3 pareció solucionar el problema.

+0

este es un problema diferente –

0

tuvimos el mismo problema (perder sesiones, sin subdominio), con nginx + thin. La migración a apache + pasajero (última versión) solucionó el problema.

3

en Rails 2.3 se debe utilizar

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

Intenté poner esto en development.rb y obtuve: método indefinido '[] = 'for nil: NilClass –

+0

¡Ahh! Lo averigué. La variable de sesión aún no se ha creado. Esto funcionó: config.action_controller.session = {: domain => '.example.com'} –

7

respuesta de Olly es correcta, en los carriles 2.3 que debe ser:

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

Sólo quería añadir que si no tiene ya alguno las opciones de sesión creadas puede recibir esto al usar eso:

undefined method `[]=' for nil:NilClass 

En ese caso, debe usar esto i n lugar (que crea la variable de sesión en lugar de su actualización):

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

Editar: al parecer Rails 2.2.2 proyectos utilizan algo diferente. "dominio" debe llamarse "session_domain" y quitar el carácter del período del frente del dominio. Pruebe esto:

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

Impresionante, estaba obteniendo ese error exacto y ahora lo puedo arreglar: D – nitecoder

+0

Esto fue útil para mí para configurar sesiones seguras. – anonmys

1

Solo quería mencionar que otra forma de manejar todo el subdominio para las cookies es dinámicamente. Funciona en 2.3.4.

Algo como esto en el 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

estoy corriendo Rails 2.3.5 y tienen

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

en mi development.rb pero no me conseguir que funcione ?

¿Algo más que tenga que hacer?

2

Una solución más a prueba de balas sería comprobar si la sesión ya existe o no. Si está reemplazando ciegamente el objeto de la sesión completa, puede hacer que se tropiece en el futuro.

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

Me gusta hacer esto en un archivo de inicializador.

0

También estoy corriendo 2.3.5 y encontrarse con problemas similares a @ Alfred-Nerstu

No hay mensajes de error con el parche de @schickm pero no parece tener, tampoco.

0

Se podría añadir en el mismo lugar donde se configura la clave de sesión secreta y

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