无需身份验证即可实现安全下载


Secure downloads without authentication

我想创建临时链接以防止直接下载文件。

流程应该是这样的:

用户购买文件,只指示电子邮件地址->向该地址发送一封电子邮件,其中包含购买的临时文件的url。

我希望这个网址只能使用3次。

我该怎么做?在apache服务器上使用Symfony2。

我为这个极其含糊的请求道歉,但我快要失明了,我不知道该找什么方法。

生成一个随机密钥,制作一个mysql表,其中包含fileid、key、number_of_downloads。

每次用户单击链接http://www.yourdomain.com/getfile.php?file=blah&key=blash你可以更新表number_of_downloads。如果是<2,重定向到文件(使用php头或symphony的重定向),如果它>2,则给出404或其他。。。

它应该非常简单(尽管我对Symfony2了解不多)。您将有一个下载页面,其中包含一个"key"参数(可能是/download?key=blahblahblah)。创建一个数据库(或其他类型的存储),每当您需要生成下载链接时,让您的代码组成一个密钥并将其存储在数据库中。每个钥匙上还可以附加一个数字,表示它仍然可以使用的次数,或者是一个到期时间。下载页面将确保密钥仍然有效,如果有效,则提供文件。

编辑:下面是一个通过PHP脚本提供文件的示例:

// this may need to change depending on the file type
header("Content-Type: application/octet-stream");
// this makes sure the downloaded file doesn't get named "download.php"
header("Content-Disposition: attachment; filename=stuff.zip");
// and this sends the file
echo file_get_contents("/path/to/stuff.zip");

再次编辑:事实上,这可能是一个更好的方式。