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
セッションがクリアされます。
なんで?これはバグですか?
編集
問題を絞り込みました: 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
シナトラ FAQから:
有効期限など、セッションに追加のパラメーターを設定する必要がある場合は、enable :sessions の代わりに Rack::Session::Cookie を直接使用します。