Как использовать сессию синатры - PullRequest
8 голосов
/ 17 апреля 2011
enable :sessions
get '/foo' do
  session['m'] = 'Hello World!'
  redirect '/bar'
end

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

end

Кажется, это не работает.

Ответы [ 2 ]

14 голосов
/ 19 апреля 2011

Вы используете дробовик?Если это так, выполните следующие действия:

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

В Синатре 1.3 это больше не потребуется.

11 голосов
/ 17 апреля 2011

Возможно, у вас отключены файлы cookie в вашем веб-браузере?Сессии Sinatra по умолчанию используют куки.

Вот мое тестовое приложение:

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

И вот оно в действии:

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...

Без куки ваш редирект будет работатьно после перенаправления это будет новый сеанс, который начинается с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...