2012-08-16 12 views
10

Sinatra no persiste mi sesión con una redirección en Chrome. Está creando una sesión completamente nueva y estoy perdiendo todos mis datos de la sesión anterior.Sinatra no persiste sesión con redirección en Chrome

A modo de ejemplo (similar a the Sinatra docs), que estoy haciendo algo como esto:

enable :sessions 

get '/foo' do 
    session[:user_id] = 123 
    session[:session_id] # "ABC", for example 

    redirect to('/bar') 
end 

get '/bar' do 
    # this is "DEF" when responding to Chrome (wrong), 
    # but "ABC" when responding to Firefox or Safari (right) 
    session[:session_id] 

    # this is nil when responding to Chrome (wrong), 
    # but 123 when responding to Firefox or Safari (right) 
    session[:user_id] 
end 

Estoy pensando que esto tiene algo que ver con cómo los diferentes navegadores responden a la manipulación de la sesión después de una redirección respuesta. ¿Alguien ha visto algo similar a esto, o tiene alguna idea sobre cómo resolver esto mientras sigue usando sesiones?

¡Gracias de antemano!

+2

El manejo de sesión predeterminado en sinatra se realiza con cookies, así que supongo que esto tiene algo que ver con cómo maneja Chrome (o se niega a manejar) las solicitudes de Set-Cookie en los redireccionamientos. No estoy seguro de cómo lidiar con eso, pero una forma simple de resolver todo el problema sería usar sesiones basadas en DB, o en sesiones de memoria con redis o algo similar. – Jonah

+0

¿Cuál es su entorno? Acabo de resolver un problema relacionado con el desaparición del almacenamiento de la sesión que podría ser de interés, pero eso depende de dónde y cómo te está pasando esto. –

+0

Estaba teniendo el mismo problema, usando escenarios como entorno. –

Respuesta

0

Por favor intente desactivar todas las extensiones de gestión de cookies personalizadas son Chrome, si las hay. Después de eso, compruebe los encabezados en Herramientas de desarrolladorRed. Debería ver el campo 'Cookie:'.

1

Agregue esto a su archivo de aplicación principal: uso en rack :: :: Sesión Cookies: clave => 'rack.session', : path => '/', : secreto => 'algunos aleatoria -string '

Con eso agregado, debería poder asignar la sesión [' whatever '] y hacer que funcione como se esperaba.

+0

esto funciona para mí en pcDuino 3b sinatra –

+0

¿Alguien puede explicar por qué esto debería solucionar el problema? Al leer la documentación de Sinatra, dice que se puede usar para agregar parámetros adicionales para las sesiones, pero no estoy seguro de qué hace eso: ¿no es así para las sesiones? – Michael

0

creo que sólo porque no configuró :session_secret, remito a mi respuesta en here

0

Haciendo enable :sessions que acaba de obtener el acceso a la sesión por encargo. Sinatra no tiene forma de mantener la referencia a la llamada anterior (su redirección) ya que se trata como otra solicitud.

Por lo tanto, el cuento largo:

set :session_secret, "SecureRandom.new(10) generated thing" enable :sessions

utilice siempre enable :sessions con un secreto, de lo contrario la sesión se recrea cada estante vez ve una solicitud.

Cuestiones relacionadas