Sinatra和未设置的会话变量

由于某种原因,我的应用程序中没有设置会话变量。 我正在使用Sinatra 1.2.1。

这是一段代码:

module GitWiki class App  "utf-8" @user = session[:user] end get "/login/?" do erb :login end post "/login" do user = User.get if user.authenticate(params[:username], params[:password]) session[:user] = params[:username] p session # => {:user=>"root"} else # AZIZ! LIGHT! end redirect '/' end get "/" do p session # => {} redirect "/" + GitWiki.homepage end # ... end end 

如您所见, session[:user]未被设置,或者更确切地说,会话哈希在每次请求后被重置。 有人知道发生了什么事吗?

如果您正在使用Shotgun,请将以下行添加到configure块:

 set :session_secret, "My session secret" 

引用rkh,Sinatra目前的维护者:

[Shotgun]将在每次请求时重新启动服务器,从而重新生成会话密钥,从而使会话无效。 这已在当前主数据中修复。 简单修复:设置session_secret选项。

注意 :如果您使用Rack::Session::Pool此修复程序不起作用