Sinatra使用Rack :: Session :: Pool进行会话

时间:2013-09-03 14:04:28

标签: ruby rest session sinatra rack

我在使用Rack::Session::Pool存储会话信息的Sinatra时遇到问题。 我想要做的是通过使用'POST /dataset'将信息附加到会话哈希来“发布”一些数据,然后使用'GET /dataset'检索它并返回'session'哈希的内容。当我尝试返回值时,'session'哈希不包含:message key

require 'sinatra/base'

class Trial < Sinatra::Base
  use Rack::Session::Pool

  post '/dataset' do
    session[:message] = params[:data]
  end

  get '/dataset' do
    session[:message]
  end

end

Trial.run!

我知道这看起来微不足道,但我仍然无法让它发挥作用......

2 个答案:

答案 0 :(得分:2)

即使您使用的是Rack::Session::Pool而不是基于默认Cookie的会话存储,您仍然需要在请求中使用Cookie。会话数据存储在服务器的内存中,但会话ID需要与cookie中的每个请求一起传递。

response1 = RestClient.post 'localhost:4567/dataset', {:data => '123'}

response2 = RestClient.get 'localhost:4567/dataset', :cookies => response1.cookies

puts response2 #=> 123

答案 1 :(得分:0)

尝试

enable :sessions

有关配置的更多info