diff --git a/lib/rack/session/cookie.rb b/lib/rack/session/cookie.rb index 830a4e3..04b341e 100644 --- a/lib/rack/session/cookie.rb +++ b/lib/rack/session/cookie.rb @@ -161,7 +161,7 @@ def initialize(app, options = {}) secrets = [*(options[:secrets] || options[:secret])] encryptor_opts = { - purpose: options[:key], serialize_json: options[:serialize_json] + purpose: options[:key] != RACK_SESSION ? options[:key] : nil, serialize_json: options[:serialize_json] } # For each secret, create an Encryptor. We have iterate this Array at diff --git a/test/spec_session_cookie.rb b/test/spec_session_cookie.rb index 0e4094b..951389f 100644 --- a/test/spec_session_cookie.rb +++ b/test/spec_session_cookie.rb @@ -366,8 +366,9 @@ def decode(str); @calls << :decode; JSON.parse(str); end end it 'rejects session cookie with different purpose' do - app = [incrementor, { secrets: @secrets }] - other_app = [incrementor, { secrets: @secrets, key: 'other' }] + app = [incrementor, { secrets: @secret }] # key defaults to 'rack.session' + other_app = [incrementor, { secrets: @secret, key: 'other' }] + explicit_default_app = [incrementor, { secrets: @secret, key: 'rack.session' }] response = response_for(app: app) response.body.must_equal ({"counter"=>1}.to_s) @@ -375,6 +376,9 @@ def decode(str); @calls << :decode; JSON.parse(str); end response = response_for(app: app, cookie: response) response.body.must_equal ({"counter"=>2}.to_s) + response = response_for(app: explicit_default_app, cookie: response) + response.body.must_equal ({"counter"=>3}.to_s) + response = response_for(app: other_app, cookie: response) response.body.must_equal ({"counter"=>1}.to_s) end