Session 使用会话id加载会话
我有一个Sinatra应用程序,其中一个规则期望URL包含会话id(从以前调用的URL返回)。如何使用会话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,则可以
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