Tu peux utiliser un id temporaire :
un premier script genere un id aleatoire et un page html
donnant un lien vers un second script. Le second script
recoit l'id en parametre. L'id est garde dans la session
de l'utilisateur. La page genere contient qqc comme :
<a href="second.php?theId=12346789" >
Le second script recupere le parametre et s'il est valide
genere du code HTTP pour faire le telechargement du fichier.
En php ca pourrait donner qqc comme ca :
header ('Content-Type: application/x-zip-compressed;name="toto.zip"');
header ('Content-Transfer-Encoding: base64');
header ('Content-Disposition: attachment; filename="toto.zip"');
echo base64_encode( file_get_contents ('toto.zip') );
L'utilisateur voit le lien, mais le lien a une duree de vie limite (ou au moins controle).