最も簡単な方法は、おそらく、有効なセッションの存在を必要とするPHPスクリプト(ジェネレータースクリプトのように)を用意することです。その機能は次のとおりです。readfile("/path/to/contract.pdf");
そうすれば、PDFラッパースクリプトで、ダウンロードされているコントラクトが、ディレクトリにあるコントラクトであるだけでなく、セッション内の人にとって正しいコントラクトであることを確認できます。
ディレクトリの.htaccessベースのソリューションの問題は、ディレクトリへの読み取りアクセス権を持つすべてのユーザーが任意のコントラクトをダウンロードできることです。
次のようなURLを指定しhttp://example.com/contract.php?user=132&bill=1
ます。
<?php
$user = $_GET['user'];
$bill = $_GET['bill'];
# do input validation on $user and $bill. No really, do it.
if ($user != $_SESSION['user']) {
die("Security error; the black choppers are on their way.");
}
header("Content-type: application/pdf");
header('Content-Disposition: attachment; filename="Contract-$user-$bill.pdf"');
readfile("/path/to/pdfspool/$user/Contract-$user-$bill.pdf");
中央のif ()
チャンクは、要求されている$userが現在のユーザーに対して有効であることを確認します。明らかに、おそらくこのユーザーが最初にログインしたときに、$ _SESSION['user']を保存する必要があります。
もちろん、実際には、スプールファイルを保持する必要はありません。PDFを生成するプロセスがWebサーバーを圧倒しない場合(および他の問題がある場合)、要求に応じて、各PDFを最初から再生成する方が簡単な場合があります。これが私が現在会社の請求書で行っていることであり、各請求書は、いつ生成されたか、どのIPアドレスからの要求によって生成されたかを示す6ポイントのフッターを取得します。:)