1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Just reading flash messages should not create a session if one does not exist yet.

This commit is contained in:
José Valim 2010-06-25 09:36:26 +02:00
parent 6682cce038
commit a12b76b09e
3 changed files with 29 additions and 5 deletions

View file

@ -194,9 +194,12 @@ module ActionDispatch
@env['rack.input']
end
# TODO This should be broken apart into AD::Request::Session and probably
# be included by the session middleware.
def reset_session
session.destroy if session
self.session = {}
@env['action_dispatch.request.flash_hash'] = nil
end
def session=(session) #:nodoc:

View file

@ -4,7 +4,7 @@ module ActionDispatch
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
# to put a new one.
def flash
session['flash'] ||= Flash::FlashHash.new
@env['action_dispatch.request.flash_hash'] ||= (session["flash"] || Flash::FlashHash.new)
end
end
@ -176,7 +176,14 @@ module ActionDispatch
@app.call(env)
ensure
if (session = env['rack.session']) && session.key?('flash') && session['flash'].empty?
session = env['rack.session'] || {}
flash_hash = env['action_dispatch.request.flash_hash']
if flash_hash && (!flash_hash.empty? || session.key?('flash'))
session["flash"] = flash_hash
end
if session.key?('flash') && session['flash'].empty?
session.delete('flash')
end
end

View file

@ -236,6 +236,15 @@ class FlashIntegrationTest < ActionController::IntegrationTest
end
end
def test_just_using_flash_does_not_stream_a_cookie_back
with_test_route_set do
get '/use_flash'
assert_response :success
assert_nil @response.headers["Set-Cookie"]
assert_equal "flash: ", @response.body
end
end
private
# Overwrite get to send SessionSecret in env hash
@ -247,10 +256,15 @@ class FlashIntegrationTest < ActionController::IntegrationTest
def with_test_route_set
with_routing do |set|
set.draw do |map|
match ':action', :to => ActionDispatch::Session::CookieStore.new(
FlashIntegrationTest::TestController, :key => FlashIntegrationTest::SessionKey, :secret => FlashIntegrationTest::SessionSecret
)
match ':action', :to => FlashIntegrationTest::TestController
end
@app = self.class.build_app(set) do |middleware|
middleware.use ActionDispatch::Session::CookieStore, :key => SessionKey
middleware.use ActionDispatch::Flash
middleware.delete "ActionDispatch::ShowExceptions"
end
yield
end
end