2011-03-03 29 views
7

Estaba usando Rack Session Pool; sin embargo, mis usuarios podían ser expulsados ​​de un hilo de servidor web a otro haciendo que caduquen los datos de la sesión. Empecé a jugar con solo habilitar: sesiones en Sinatra, sin embargo no puedo usar eso porque tengo varias aplicaciones usando Sinatra (la misma clave que parece estar usando - no estoy seguro si esto es porque es el mismo host o no)Rack Session Cookie y Sinatra: configuración y acceso a los datos

así que desde mis aplicaciones se romperían entre sí, ahora estoy tratando de cookie de sesión del estante y el establecimiento de las variables (lo mismo que permitirá: sesiones, pero se pueden establecer las variables)

Gran manera que funciona! Pero ahora no puedo acceder a los datos de la sesión de la manera que lo estaba usando, en el estante de la Sesión Conjunta y en Enable: sesiones

session[:user] = nick 
puts session[:user] 

usted consigue la idea ...

pregunta es por qué puedo acceder a datos de la sesión con session [: user] en Pool y Sinatra enable: sesiones, pero no en Rack Session Cookie? ¿Me estoy perdiendo algo? Todo lo que estoy haciendo está por debajo

config.ru

use Rack::Session::Cookie, :key => 'key', 
          :domain => "localhost", 
          :path => '/', 
          :expire_after => 14400, # In seconds 
          :secret => 'secret' 

EDIT:

hecho un poco de más pruebas y encontraron que en realidad es ponerlo en la variable de sesión, sin embargo, tan pronto como se mueve a una nuevo método o la redirección de la variable de sesión parece estar disminuido (esta cookie es realmente más grande que 4KBs ?!) - no se puede permitir porque: sesiones funciona bien

+0

Simplemente vacíe requestcookies para cada solicitud y vea si puede encontrar algo sospechoso. – Zimbabao

Respuesta

10

esto es lo que hice para solucionar este problema:

use Rack::Session::Cookie, :key => 'my_app_key', 
          :path => '/', 
          :expire_after => 14400, # In seconds 
          :secret => 'secret_stuff' 

¿Ves la diferencia con lo anterior? - Sin dominio, si dejo que Rack :: Session :: Cookie especifique el dominio o el navegador (quienquiera que lo haga), no tengo errores entre varias aplicaciones Sinatra/Rack ...

+0

¿No es este enfoque muy inseguro? – include

+0

Si es solo una cookie sin datos de autentificación/autorización en él, entonces no, sus sesiones de configuración y poniendo algunos datos en ella – nictrix

+0

Tengo el mismo problema y probé su solución al pie de la letra. Pero ahora, no importa lo que puse en el hash 'session',' before do; p sesión; end' muestra solo '{" session_id "=>" b59 ... "}'. –

2

Problema con el dominio 'localhost '. Este hilo se describen con más detalles en cuanto a porqué haber localhost como el dominio no funcionaría: Cookies on localhost with explicit domain

Una solución sería la de configurar un dominio en su archivo de hosts como

127.0.0.1 superduper.dev 

A continuación, establezca su dominio en su configuración de sesiones a superduper.dev. Luego, durante el desarrollo, puedes ir al puerto que necesites. Ex. superduper.dev:5000

Cuestiones relacionadas