class Rack::Session::Cookie

def unpacked_cookie_data(request)

def unpacked_cookie_data(request)
  request.fetch_header(RACK_SESSION_UNPACKED_COOKIE_DATA) do |k|
    if cookie_data = request.cookies[@key]
      session_data = nil
      # Try to decrypt the session data with our encryptors
      encryptors.each do |encryptor|
        begin
          session_data = encryptor.decrypt(cookie_data)
          break
        rescue Rack::Session::Encryptor::Error => error
          request.env[Rack::RACK_ERRORS].puts "Session cookie encryptor error: #{error.message}"
          next
        end
      end
      # If session decryption fails but there is @legacy_hmac_secret
      # defined, attempt legacy HMAC verification
      if !session_data && @legacy_hmac_secret
        # Parse and verify legacy HMAC session cookie
        session_data, _, digest = cookie_data.rpartition('--')
        session_data = nil unless legacy_digest_match?(session_data, digest)
        # Decode using legacy HMAC decoder
        session_data = @legacy_hmac_coder.decode(session_data)
      elsif !session_data && coder
        # Use the coder option, which has the potential to be very unsafe
        session_data = coder.decode(cookie_data)
      end
    end
    request.set_header(k, session_data || {})
  end
end