我在我的网站上提供了一个直接下载链接,如下所示。
<a href="myfile.pdf">Download here</a>
每个人都可以访问此文件。但我想根据登录用户限制这一点。
假设用户在成功登录后拥有活动的会话/ cookie,如下所示。
$_SESSION['login'] = 1 or $_COOKIE['login'] = 1
即使设置了以下条件,人们也可以手动输入http://web.com/myfile.pdf并能够下载文件...
if($_SESSION['login']===1 && $_COOKIE['login']===1){
echo '<a href="myfile.pdf">Download here</a>';
}
其他匿名用户无法访问该文件。
答案 0 :(得分:4)
如果是我,我会使用这样的东西来完全隐藏未登录用户的链接
if($_SESSION['login']===1 || $_COOKIE['login']===1){
echo '<a href="myfile.pdf">Download here</a>';
}
如果您在单击链接后根据会话寻找特定的下载拒绝,则必须设置某种类型的脚本来处理上述代码并返回所需的文件。
编辑:
好的,然后将其链接到一个脚本,该脚本从不可访问的位置检索文件,并使用相同的if / then语句将其反馈回来。
像
这样的东西filedownload.php?文件名= foo.bar
然后filedownload.php看起来像这样。
<?php
session_start();
if($_SESSION['login']===1 && $_COOKIE['login']===1){
$file_dir = "/some/dir/";
$file = $file_dir . 'foo.bar';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
} else {
echo "You need to login to download this file.";
}
?>
这是直接从PHP手册中复制的。并添加了if / then语句。