Session 使用会话id加载会话

Session 使用会话id加载会话,session,sinatra,rack,Session,Sinatra,Rack,我有一个Sinatra应用程序,其中一个规则期望URL包含会话id(从以前调用的URL返回)。如何使用会话ID引用的会话重载会话 use Rack::Session::Pool get "example/:session_id" do sessionId = params[:session_id] # how to reload the session now, using the sessionId? end 谢谢你的帮助 路径中的会话ID 如果必须使用路径中的会话id,则可以

我有一个Sinatra应用程序,其中一个规则期望URL包含会话id(从以前调用的URL返回)。如何使用会话ID引用的会话重载会话

use Rack::Session::Pool

get "example/:session_id" do
  sessionId = params[:session_id]

  # how to reload the session now, using the sessionId?

end
谢谢你的帮助

路径中的会话ID 如果必须使用路径中的会话id,则可以使用这种黑客方式

# app.rb
require 'sinatra'

configure do
  use Rack::Session::Pool, :key => 'session_id'
end

get "/example/:session_id" do
  session.id = params[:session_id]
  session[:force_load] = 'force' # force session.load!()
  session.delete(:force_load)    # remove dummy value

  session[:count] = session[:count].to_i + 1
  session.inspect
end
请求参数中的会话ID 如果您愿意将会话id移动到请求参数(查询参数或正文参数),支持的方法是将选项设置为
false

演示

# app.rb
require 'sinatra'

configure do
  use Rack::Session::Pool, {
    :key => 'session_id', 
    :cookie_only => false, # adds request params as source for session id
  }
end

# works with /example?session_id=
get '/example' do
  session[:count] = session[:count].to_i + 1
  session.inspect
end
$ ruby app.rb &> /dev/null  &

$ curl -i localhost:4567/example?session_id=

  HTTP/1.1 200 OK 
  Set-Cookie: session_id=2a06759c64c130bc45036076; path=/; HttpOnly

  {"count"=>1}

$ curl -i localhost:4567/example?session_id=2a06759c64c130bc45036076

  HTTP/1.1 200 OK 
  Set-Cookie: session_id=2a06759c64c130bc45036076; path=/; HttpOnly

  {"count"=>2}

$ kill %1