2011-04-17 10 views
8
enable :sessions 
get '/foo' do 
    session['m'] = 'Hello World!' 
    redirect '/bar' 
end 

get '/bar' do 
    session['m'] # => 'Hello World!' 

end 

Parece que no funciona.Cómo utilizar la sesión de sinatra

+3

funciona. ¿Cuál es tu versión de ruby ​​y sinatra? –

Respuesta

10

¿Quizás tiene deshabilitadas las cookies en su navegador web? Las sesiones de Sinatra usan cookies por defecto.

Aquí está mi aplicación de prueba:

require 'sinatra' 
enable :sessions 
get '/foo' do 
    session['m'] = 'Hello World!' 
    redirect '/bar' 
end 
get '/bar' do 
    <<-ENDRESPONSE 
    Ruby: #{RUBY_VERSION} 
    Rack: #{Rack::VERSION} 
    Sinatra: #{Sinatra::VERSION} 
    #{session['m'].inspect} 
    ENDRESPONSE 
end 

y aquí está en acción:

phrogz$ curl --cookie-jar cookies.txt -L http://localhost:4567/foo 
    Ruby: 1.9.2 
    Rack: [1, 1] 
    Sinatra: 1.2.3 
    "Hello World!" 

phrogz$ curl -L http://localhost:4567/foo 
    Ruby: 1.9.2 
    Rack: [1, 1] 
    Sinatra: 1.2.3 
    nil 

phrogz$ cat cookies.txt 
# Netscape HTTP Cookie File 
# http://curl.haxx.se/rfc/cookie_spec.html 
# This file was generated by libcurl! Edit at your own risk. 

localhost FALSE / FALSE 0 rack.session BAh7BkkiBm0GOgZFRkkiEUhl... 

Sin cookies, su redireccionamiento funciona, pero será como si es una marca nueva sesión después de la redirección, con la sesión comenzando desde cero.

+0

Realmente gracias, tu método es realmente genial. La causa es que uso el servidor de escopeta. – chenge

+0

@chenge Me alegro de que esto haya ayudado. Si siente que esto solucionó su problema, debe aceptarlo como la respuesta (presione la marca de verificación al lado de la respuesta). Si la respuesta de @ Konstantin ha resuelto su problema, márquelo como aceptado. – Phrogz

+0

útil, pero no es la solución final. – chenge

14

¿Estás usando escopeta? De ser así, haga lo siguiente:

configure(:development) { set :session_secret, "something" } 

Esto ya no será necesario en Sinatra 1.3.

+0

Gracias, sí, uso escopeta. ¿Podría dar una guía con más detalles? – chenge

+0

Tuve el mismo problema al utilizar Shotgun, simplemente actualicé a sinatra-1.2.6 y funciona como se esperaba con Shotgun. – Tom

+0

sinatra 1.3.2 + escopeta 0.9, todavía necesita este truco para funcionar. – Neo