Techioz Blog

Rack::Session::Cookie のリクエスト間でセッションが持続しない

概要

ラックを使用してセッション Cookie ベースを実装しようとしましたが、アプリケーションはリクエスト間で情報を保持していないようです。ユーザーがログインに成功した後、リダイレクトされたときにインデックスで使用されるフラッシュ メッセージを保存することになっていましたが、何が起こっていません:

-PostHandler

  env['rack.session'][:flash] = "Successfully Logged In."
  res.status = 302
  res['Location'] = '/login'

-ルート

  res = Rack::Response.new(render("index", @flash="#{env['rack.session'][:flash] || "No flash."}"))

スタックは、先頭に Rack::Session::Cookie を使用して次のように実装されます。

  use Routes
  use PostHandler
  run Application.new

wdID?

解決策

議論のために説明すると、この問題はキャッシュの実装方法に関連しており、アプリ スタックのセッションの 1 層下にあり、ignore_headers: [‘Set-Cookie’] を設定していました。これにより、アプリケーションは Cookie を設定しなくなりました。ユーザーは、キャッシュ設定、ignore_headers: []; で設定を元に戻すことができます。