Permalink
Browse files

fix the Flash middleware loading the session on every request (very d…

…angerous especially with Rack::Cache), it should only be loaded when the flash method is called
  • Loading branch information...
1 parent 9fc9e89 commit 5638adfd87dbec20183443204793c1de41ee9bb7 @willbryant committed Jan 23, 2012
@@ -473,7 +473,6 @@ def process(action, http_method = 'GET', *args)
@request.session = ActionController::TestSession.new(session) if session
@request.session["flash"] = @request.flash.update(flash || {})
- @request.session["flash"].sweep
@controller.request = @request
build_request_uri(action, parameters)
@@ -4,7 +4,7 @@ class Request
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
# to put a new one.
def flash
- @env[Flash::KEY] ||= (session["flash"] || Flash::FlashHash.new)
+ @env[Flash::KEY] ||= (session["flash"] || Flash::FlashHash.new).tap(&:sweep)
end
end
@@ -217,10 +217,6 @@ def initialize(app)
end
def call(env)
- if (session = env['rack.session']) && (flash = session['flash'])
- flash.sweep
- end
-
@app.call(env)
ensure
session = env['rack.session'] || {}
@@ -237,7 +233,8 @@ def call(env)
env[KEY] = new_hash
end
- if session.key?('flash') && session['flash'].empty?
+ if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?)
+ session.key?('flash') && session['flash'].empty?
session.delete('flash')
end
end

0 comments on commit 5638adf

Please sign in to comment.