diff --git a/actionpack/lib/action_controller/session/cookie_store.rb b/actionpack/lib/action_controller/session/cookie_store.rb index 3d21e812eae1..2fcee56fda30 100644 --- a/actionpack/lib/action_controller/session/cookie_store.rb +++ b/actionpack/lib/action_controller/session/cookie_store.rb @@ -114,11 +114,8 @@ def call(env) end cookie = build_cookie(@key, cookie.merge(options)) - unless headers[HTTP_SET_COOKIE].blank? - headers[HTTP_SET_COOKIE] << "\n#{cookie}" - else - headers[HTTP_SET_COOKIE] = cookie - end + headers[HTTP_SET_COOKIE] = [] if headers[HTTP_SET_COOKIE].blank? + headers[HTTP_SET_COOKIE] << cookie end [status, headers, body] diff --git a/actionpack/test/controller/session/cookie_store_test.rb b/actionpack/test/controller/session/cookie_store_test.rb index 5ef8eec8bdde..26d56890d4af 100644 --- a/actionpack/test/controller/session/cookie_store_test.rb +++ b/actionpack/test/controller/session/cookie_store_test.rb @@ -44,6 +44,12 @@ def raise_data_overflow head :ok end + def set_session_value_and_cookie + cookies["foo"] = "bar" + session[:foo] = "bar" + render :text => Rack::Utils.escape(Verifier.generate(session.to_hash)) + end + def rescue_action(e) raise end end @@ -96,7 +102,7 @@ def test_setting_session_value with_test_route_set do get '/set_session_value' assert_response :success - assert_equal "_myapp_session=#{response.body}; path=/; HttpOnly", + assert_equal ["_myapp_session=#{response.body}; path=/; HttpOnly"], headers['Set-Cookie'] end end @@ -164,7 +170,7 @@ def test_setting_session_value_after_session_reset get '/set_session_value' assert_response :success session_payload = response.body - assert_equal "_myapp_session=#{response.body}; path=/; HttpOnly", + assert_equal ["_myapp_session=#{response.body}; path=/; HttpOnly"], headers['Set-Cookie'] get '/call_reset_session' @@ -193,6 +199,14 @@ def test_persistent_session_id end end + def test_setting_session_value_and_cookie + with_test_route_set do + get '/set_session_value_and_cookie' + assert_response :success + assert_equal({"_myapp_session" => response.body, "foo" => "bar"}, cookies) + end + end + private def with_test_route_set with_routing do |set|