是否可以将我服务器上的文件/ directorys的首选项设置为不可下载,但如果用户有会话,则他可以访问这些文件并可以下载它们。
我知道我可以禁用"下载按钮"使用$_SESSION
,例如:
$downloadbutton = "<a href='abc.jpg'>Download</a>";
if($_SESSION["xy"] == "abc"){
echo $downloadbutton
}
但可以通过www.url.com/directpath/abc.jpg
那么如何保护文件呢?
答案 0 :(得分:2)
要对下载有更多控制权,可以使用以下功能:
function makeDownload($file, $dir, $type) {
header("Content-Type: $type");
header("Content-Disposition: attachment; filename=\"$file\"");
readfile($dir.$file);
}
答案 1 :(得分:1)
您可以通过查看PHPSESSID
中的.htaccess
Cookie来限制直接访问:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} PHPSESSID=[^;]
RewriteRule .* - [L]
RewriteRule .* - [F,L]
使用SetEnv的更好示例:
SetenvIf Cookie PHPSESSID=[^;] permit
Allow from env=permit
Deny from all
答案 2 :(得分:1)
如果您想要保护下载访问权限,则永远不应该使用原始URL实际提供文件,请始终使用文件代理。这样,用户永远不会看到文件来自何处,并且只能使用您的代理脚本,您可以控制它是否可以提供服务。
如果你环顾四周,有大量的脚本已经专门编写。您可以找到其中一个here并将会话验证添加到其中。