Sinatra czyści sesję na poczcie
enable :sessions
set :session_secret, 'secret'
post '/login' do
session[:loggedInUser] = jsondata['username'].to_s
puts session[:loggedInUser] + " is the session"
end
Wszystko jest w tym momencie dobre. Kiedy czytam sesję w ten sposób:
get '/debug' do
session.inspect
end
Wszystko tam jest. Ale tu pojawia się problem. Kiedy później wybiorę się na kolejną prośbę o wpis:
post '/foo' do
# do nothing
end
Sesja zostanie wyczyszczona.
Czemu? Czy to błąd?
EDYTOWAĆ
Zawęziłem problem: I proxypass Sinatra przez nginx, dohttp://app.local/backend
- wtedy pojawia się problem. Jeśli przepuszczę Sinatręhttp://localhost:4567
wszystko działa zgodnie z oczekiwaniami.
ROZWIĄZANIE
Posługiwać sięRack::Session::Cookie
zamiast domyślnegoenable :sessions
:
use Rack::Session::Cookie, :key => "rack.session",
:path => "/backend"
# etc
Jeśli musisz ustawić dodatkowe parametry dla sesji, takich jak data ważności, użyj bezpośrednio Rack :: Session :: Cookie zamiast enable: session: