我試圖通過在西納特拉的after
過濾器要做到這一點,但它沒有工作,我想這將after
過濾器已運行後的會議,所以我敲了一個快速機架過濾器,它似乎工作。
require 'sinatra'
class SessionExpiryModifier
def initialize(app,options={})
@app,@options = app,options
end
def call(env)
warn env["rack.session.options"].inspect
t = Time.now.to_i.even? ? 10 : 60
env["rack.session.options"].merge! :expire_after => 60 * 60 * t
@app.call env
end
end
configure do
use Rack::Session::Cookie,
:expire_after => 60*60*3,
:secret => 'xxxx' * 10
use SessionExpiryModifier
end
get "/" do
session[:usr] = Time.now
env["rack.session.options"].inspect
end
然而,這使得它有很多很難得到來自西納特拉應用條件到機架過濾器上採取哪個分支決定,而是取決於你的條件是什麼。也許可以在過濾器可以讀取的頭文件中插入一些內容以做出決定。
希望有所幫助。