由于某种原因,我的应用程序中未设置会话变量。我使用的是 Sinatra 1.2.1。
这是一段代码:
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]
未设置,或者会话哈希在每次请求后都会重置。请问有人知道这是怎么回事吗?
如果您使用 Shotgun,请将以下行添加到配置块:
set :session_secret, "My session secret"
引用 Sinatra 现任维护者 rkh 的话:
[Shotgun] 将根据每个请求重新启动服务器,从而重新生成会话密钥,从而使您的会话无效。这已在当前 master 中修复。简单修复:设置 session_secret 选项。
NOTE:如果您使用此修复程序,则此修复程序不起作用Rack::Session::Pool
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)