在 Rack 中间件中不能使用 Sinatra 的session方法,但是可以通过envhash 直接访问 session。
确保 session 中间件在你的中间件之前(所以在 Sinatra 中enable :sessions应该在 before use MyMiddleware),然后 session 可以通过 key 获得'rack.session':
class MyMiddleware
def initialize(app, options={})
@app = app
end
def call(env)
puts env['rack.session'].inspect
@app.call(env)
end
end
您可能更喜欢使用Rack::Request对象来更轻松地访问会话和env哈希的其他部分:
def call(env)
request = Rack::Request.new(env)
puts request.session.inspect
# other uses of request without needing to know what keys of env you need
@app.call(env)
end