我之前发布在这里:
Controlling Access for Trial Subscription
由于这是一个基于建议的新问题,我想我应该开始一个新帖子。如果这应该是一个编辑,请让我知道将来。
我认为我要控制访问的解决方案是上传文件并散列名称。该文件的格式为:
/上传/ #############。PDF
将向订阅者发送链接。他们第一次来到网站时,他们会被要求创建一个“pin”和一个“提示”来记住。然后,可以访问目标网页,通过电子邮件地址/图钉组合列出他们的项目。
我的问题是:我知道我可以控制对页面的访问,显示他们可以查看哪些项目,但有没有办法控制/ uploads / [file]只能在某种程序化后下载校验?我想不出有什么方法可以做到这一点......
再次感谢。 D.
答案 0 :(得分:1)
您的pdf文件不必位于用户可查看的目录中。它们可以位于您的Web根目录之外。这样,没有人可以实际浏览到www.yoursite.ext/uploads/2395wrfhgt.pdf
自己下载或与他人共享链接。
为了下载pdf,你将拥有一个专用脚本,它将对请求它的用户进行所有访问检查,如果一切正常,它将设置相应的头文件,从文件系统中读取文件,然后打印它给用户。
因此,假设您的网站位于/var/www/site/htdocs/
,并且您将每个pdf上传到/var/www/site/uploads/
。您甚至不需要对文件名进行哈希处理,而是可以保持它们的名称,以便于组织。
然后,所有下载文件的链接都将指向www.yoursite.ext/download.php?id={fileid}
您的download.php将执行所有访问检查(正确登录,有权下载文件等),然后执行以下操作:
$pathToPdf = '/var/www/site/uploads/some.pdf' ;
header('Content-Type: application/pdf');
header('Content-Length: ' . filesize($pathToPdf));
header('Content-Disposition: attachment; filename=' . 'some.pdf');
readfile($pathToPdf) ;
这就是它。一旦你开始工作,你可以考虑改进一些事情: