after
Sinatraのフィルターを介してこれを実行しようとしましたが、うまくいきませんでした。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
ただし、これにより、Sinatra アプリから Rack フィルターに条件を取得して、どの分岐を取るかを決定することが非常に難しくなりますが、それは条件によって異なります。おそらく、フィルターが決定を下すために読み取ることができる何かをヘッダーに挿入します。
それが役立つことを願っています。