Install

$ gem install rack-flash-session

Rails

# config/environment.rb
config.gem 'rack-flash-session', :lib => 'rack/flash-session'
config.middleware.insert_before(ActionController::Base.session_store, 'Rack::FlashSession');

Middleware

# add a use line to your builder
require 'rack/flash-session'
Rack::Builder.new do
  use Rack::FlashSession
  run MyApp.new
end

Options

The default session key is ‘_session_id’ but you can specify your own:

use Rack::FlashSession, 'sid'

Or in Rails you can reference the key defined to be used as session key:

config.middleware.insert_before(ActionController::Base.session_store, 'Rack::FlashSession', config.action_controller.session[:key])

Note that the session key is used for both the query parameter name and the cookie name.

You can specify multiple session keys:

use Rack::FlashSession, 'sid', 'my_other_session_key'

Thanks to:

Rob Anderton for posting Flash uploaders, Rails, cookie based sessions and CSRF: Rack Middleware to the rescue! (thewebfellas.com/blog/2008/12/22/flash-uploaders-rails-cookie-based-sessions-and-csrf-rack-middleware-to-the-rescue) on which this gem is based.