Ciao CarloGiuseppe e benvenuto nel Forum GT.

La prima cosa da fare è ovviamente impedire di scaricare direttamente il file conoscendo il percorso.

Nella cartella del download, oltre ad inserire un file index.html vuoto, ti basterà inserire un file .htaccess con queste poche righe:

<Files ~ ".+"> Order allow,deny Deny from all Satisfy All </Files>

In questo modo non si potrà scaricare direttamente il file.

Per quanto riguarda l'autorizzazione allo scarico potresti creare una chiave che sia una combinazione tra un parola chiave di tua scelta ed il timestamp della richiesta, combinate ed hashate con sha1. La chiave viene salvata su un campo del Db ed inviata via mail all'utente (vvv.sito.ext/download.php?key=1234567890123456 per esempio)

Per autorizzare il download verificherai che la key è valida, quindi contenuta nel Db, e non utilizzata e procederai all'invio al browser del file per la scarimento, aggiornando la tabella per dire che la key è stata utilizzata.

Per inviare al browser il file potresti utilizzare qualcosa del genere:
[php]<?php

$file = 'ebook/ebook.pdf';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));

header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit;

}
?> [/php];)