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
会话被清除.
为什么?这是一个bug吗?
编辑
我缩小了问题:我通过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
If you need to set additional parameters for sessions,like expiration
date,use Rack::Session::Cookie directly instead of enable :sessions:
解决方法
我正在遭受与你同样的问题:会议在职后被清除.
我不知道为什么这样工作,但这是我的解决办法:
#enable :sessions use Rack::Session::Cookie,:key => 'rack.session',:path => '/',:secret => 'your_secret'
我真的只是使用Rack :: Session :: Cookie …替换了enable:sessions位,现在全世界都很好.