10
由於某些原因,會話變量未在我的應用程序中設置。我正在使用Sinatra 1.2.1。Sinatra和未設置的會話變量
這裏是一段代碼:
module GitWiki
class App < Sinatra::Base
configure do
enable :sessions
set :app_file, __FILE__
set :root, File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
set :auth do |bool|
condition do
redirect '/login' unless logged_in?
end
end
end
helpers do
def logged_in?
not @user.nil?
end
end
error PageNotFound do
page = request.env["sinatra.error"].name
redirect "/#{page}/edit"
end
before do
content_type "text/html", :charset => "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]
沒有被置位,或者更確切地說,該會話散列正在復位在每個請求之後。有人知道發生了什麼事嗎?
從Sinatra的文檔此修復程序不起作用:「不過,因爲這個祕密將與您的應用程序的每一個開始改變,你可能需要設置祕密自己......「 – imwilsonxu 2012-09-05 09:56:23
好多了,謝謝aziz。 – pje 2012-11-22 06:01:35
我喜歡「NOTE」,你碰巧知道誰用Rack :: Session :: Pool來解決這個問題嗎? – 2014-10-30 10:43:46