PHP 限制访问,提交后仅下载


PHP restrict access, download after submit only

我希望只有在有人使用注册表单(提交后)时才能限制对下载的访问。HTML/PHP无法通过复制/粘贴或发布的链接访问。

这是我到目前为止所拥有的:服务器:服务器上的"下载"文件夹有一个 .htaccess 文件,其中包含

<Files download.pdf>
order deny,allow
deny from all
</Files>

网站:在表单上,提交后有一个PHP联系人表单处理程序,它将注册信息发送到电子邮件地址,并重定向到"谢谢 - 这是您的下载html页面"。我已在此html页面上添加

<META http-equiv="refresh" content="1;URL=http://www.pathtofilehere/signupform.php">
<a rel="nofollow" href="http://www.pathtofilehere/signupform.php"> Get Your Download Now!</a>

然后,"谢谢 - 这是您的下载"页面会提示自动下载 PHP。

<?php
$filename = "download.pdf";
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='"".basename($filename)."'";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
?> 

我在测试服务器上,所以我无法将"下载"移出根目录。一旦我完成此设置,我会将其移出根目录。还有一个问题...网站所有者未设置数据库。因此,此时登录不起作用。与此同时...

我想发生的事情:只有在表格"提交"后才能下载。现在,我可以通过html页面访问下载。或 PHP 页面。我在论坛上尝试了网关 PHP --> 受保护的文件 PHP,但无法让它工作。我可以设置某种参数,会话来传递,使其仅对"注册"人员可见/访问吗?

非常感谢。

最简单的方法(没有任何类型的登录)是添加一个会话变量,当访问者按下提交并在下载页面中签入是否存在时设置该变量。

只需添加类似以下内容:

session_start();
$_SESSION['submitted'] = 'somevalue';

在处理提交的页面顶部,并且:

session_start();
if (!isset($_SESSION['submitted']))
{
  // do whatever you want to do
  die();    // stop further execution
}
$filename = "download.pdf";
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off');
header("Pragma: public");
....

在您发布的下载脚本的顶部。

但是,当您谈论注册时,您还可以添加允许用户稍后登录以获取文件的功能(如果注册与用户帐户相关)。然后,您将让用户登录并在下载页面顶部检查登录用户。

全局$_POST[]包含仅通过 post 方法提交的特定表单值。

如果通过对此变量进行一些检查来包装脚本,则可能会找到解决方案。

为了安全起见,您可以渲染某种哈希值,也可以通过表单ad将它们与预期进行比较。