#ruby #sinatra
#ruby #sinatra
Вопрос:
enable :sessions
get '/foo' do
session['m'] = 'Hello World!'
redirect '/bar'
end
get '/bar' do
session['m'] # => 'Hello World!'
end
Похоже, это не работает.
Комментарии:
1. это работает. какая у вас версия ruby и sinatra?
Ответ №1:
Вы используете shotgun? Если это так, выполните следующее:
configure(:development) { set :session_secret, "something" }
В Sinatra 1.3 в этом больше не будет необходимости.
Комментарии:
1. Спасибо, да, я использую shotgun. Не могли бы вы дать руководство с более подробной информацией?
2. У меня была такая же проблема с использованием Shotgun, только что обновленного до sinatra-1.2.6, и он работает, как ожидалось, с Shotgun.
3. повторный запуск является альтернативой shotgun.
gem install rerun
затем запустите свое приложение сrerun ruby app.rb
Ответ №2:
Возможно, у вас отключены файлы cookie в вашем веб-браузере? Сеансы Sinatra по умолчанию используют файлы cookie.
Вот мое тестовое приложение:
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...
Без файлов cookie ваше перенаправление будет работать, но после перенаправления это будет выглядеть так, как если бы это был совершенно новый сеанс, начинающийся с нуля.
Комментарии:
1. Действительно спасибо, ваш метод действительно классный. Причина в том, что я использую shotgun server.
2. @chenge Я рад, что это помогло. Если вы чувствуете, что это решило вашу проблему, вы должны принять это как ответ (нажмите на галочку рядом с ответом). Если ответ @Konstantin решил вашу проблему, пометьте его как принятый.
3. полезно, но не окончательное решение.