【问题标题】:Sinatra session not preserved with Rack::FiberPoolSinatra 会话未使用 Rack::FiberPool 保留
【发布时间】:2011-05-30 22:50:38
【问题描述】:

请求之间不会保留会话,但我看不出我做错了什么。代码!

require 'sinatra'
require 'rack/fiber_pool'

class SessionTest < Sinatra::Base
  use Rack::FiberPool
  enable :sessions
  set :session_secret, "foobar"

  get '/' do
        body { session.inspect } #This is always '{}'!
  end

  get '/a' do
    session['user'] = "bob"
    redirect '/'
  end
end

run SessionTest.new

【问题讨论】:

    标签: ruby sinatra rack thin fiber


    【解决方案1】:

    试试这个:

    require 'sinatra'
    require 'rack/fiber_pool'
    
    class SessionTest < Sinatra::Base
      enable :sessions
      set :session_secret, "foobar"
    
      get '/' do
            body { session.inspect } #This is always '{}'!
      end
    
      get '/a' do
        session['user'] = "bob"
        redirect '/'
      end
    end
    
    use Rack::FiberPool
    run SessionTest.new
    

    否则 Sinatra 会在会话中间件之后建立纤程池,这不起作用。这不是错误,而是由 Rack::FiberPool 的工作方式引起的。

    【讨论】:

      【解决方案2】:

      原来用use Rack::Session::Cookie 替换enable :sessions 就足以让它工作。

      但是为什么!?

      【讨论】:

        猜你喜欢
        • 2011-12-03
        • 2013-09-06
        • 2016-03-06
        • 1970-01-01
        • 2015-12-12
        • 2013-06-25
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多