Baixe com segurança o arquivo dentro do navegador com o nome de arquivo correto

Estou trabalhando em um site que possui uma área segura, disponível para os usuários somente após o login. Nesta área, há uma página com links para documentos em PDF que podem ser baixados. Os documentos físicos estão fora do diretório raiz do site. Os links para os documentos em PDF são mais ou menos assim:

index.php? page = área segura / download & arquivo = protected.pdf

Que executa o seguinte (observação: eu sei que essa é a maneira de forçar um download em vez de abrir o arquivodentro o navegador):

// check security, get filename from request, prefix document download directory and check for file existance then...

header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Connection: Close');
set_time_limit(0);
readfile($file);

Isso funciona bem, mas no Firefox 3 e no Internet Explorer 7 (não testei com nenhum outro navegador) não abre esse arquivo dentro do navegador, ambos mostram a caixa de diálogo de download (conforme o esperado). Se eu selecionar Abrir em vez de Salvar, o documento será baixado e o Adobe Reader será iniciado fora do navegador para renderizar o documento.

O problema que tenho é baixar o arquivo dentro do navegador e ter o nome de arquivo padrão correto, se salvo.

Gostaria que o documento fosse aberto no navegador. Uma maneira de fazer isso é usar o cabeçalho "Content-Disposition: inline;" mas isso significa que não posso especificar um nome de arquivo (porque parece ser ignorado pelo navegador). O problema de fazer isso é quando eu salvo o documento, o nome padrão é o da URL, não o nome do arquivo do documento pdf:

http___example.com_index.php_page=secure_area_download&file=protected.pdf

Como posso obter o Firefox e o Internet Explorer para abrir o documento dentro do navegador e fornecer o nome de arquivo padrão correto para salvar?

questionAnswers(5)

yourAnswerToTheQuestion