Как использовать сеанс sinatra

#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. полезно, но не окончательное решение.