enable :sessions
set :session_secret, 'secret'
post '/login' do
session[:loggedInUser] = jsondata['username'].to_s
puts session[:loggedInUser] + " is the session"
end
В этот момент все хорошо. Когда я прочитал сеанс следующим образом:
get '/debug' do
session.inspect
end
Все там. Но здесь возникает проблема. Когда я отправляюсь на другой почтовый запрос позже:
post '/foo' do
# do nothing
end
Сессия очищается.
Почему? Это ошибка?
ИЗМЕНИТЬ
Я сузил проблему: я proxypass Sinatra через nginx, до http://app.local/backend
- это когда проблема возникает. Если я запустил Sinatra через http://localhost:4567
, все будет работать так, как ожидалось.
Решение
Используйте Rack::Session::Cookie
вместо стандартного enable :sessions
:
use Rack::Session::Cookie, :key => "rack.session",
:path => "/backend"
# etc
из Часто задаваемые вопросы по Sinatra:
Если вам нужно установить дополнительные параметры для сеансов, например, истечение срока действия date, используйте Rack:: Session:: Cookie непосредственно вместо включения: сеансы: