我有一个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谢谢你的帮助!
发布于 2014-08-18 05:36:38
路径中的会话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
一种受支持的方法是将:cookie_only选项设置为false,如果您愿意将session_id移至请求参数(查询参数或主体参数)
# 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 %1https://stackoverflow.com/questions/23571027
复制相似问题