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
此修复程序不起作用