enable :sessions
set :session_secret, 'secret'
post '/login' do
session[:loggedInUser] = jsondata['username'].to_s
puts session[:loggedInUser] + " is the session"
end
Run Code Online (Sandbox Code Playgroud)
在这一点上,一切都很好.当我像这样阅读会话时:
get '/debug' do
session.inspect
end
Run Code Online (Sandbox Code Playgroud)
它就在那里.但问题来了.当我稍后再次发送邮件请求时:
post '/foo' do
# do nothing
end
Run Code Online (Sandbox Code Playgroud)
会话已清除.
为什么?这是一个错误吗?
编辑
我已经缩小了问题范围:我通过nginx代理通过Sinatra,http://app.local/backend这就是问题出现的时候.如果我通过http://localhost:4567它运行Sinatra 一切都按预期工作.
解
使用Rack::Session::Cookie而不是默认值enable :sessions:
use Rack::Session::Cookie, :key => "rack.session",
:path => "/backend"
# etc
Run Code Online (Sandbox Code Playgroud)
来自Sinatra FAQ:
如果您需要为会话设置其他参数,例如到期日期,请直接使用Rack :: Session :: Cookie而不是enable:sessions: