enable :sessions
set :session_secret, 'secret'
post '/login' do
session[:loggedInUser] = jsondata['username'].to_s
puts session[:loggedInUser] + " is the session"
end
Everything is good at this point. When I read the session like this:
get '/debug' do
session.inspect
end
Its all there. But here comes the problem. When I go for another post request later on:
post '/foo' do
# do nothing
end
The session is cleared.
Why? Is this a bug?
EDIT
I have narrowed the problem down: I proxypass Sinatra through nginx, to http://app.local/backend
- this is when the issue occurs. If I run Sinatra through http://localhost:4567
it all works as expected.
SOLUTION
Use Rack::Session::Cookie
instead of the default enable :sessions
:
use Rack::Session::Cookie, :key => "rack.session",
:path => "/backend"
# etc
from the Sinatra FAQ:
If you need to set additional parameters for sessions, like expiration
date, use Rack::Session::Cookie directly instead of enable :sessions:
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…