仅允许使用活动会话下载文件

时间:2015-06-15 18:04:34

标签: php file session server

是否可以将我服务器上的文件/ directorys的首选项设置为不可下载,但如果用户有会话,则他可以访问这些文件并可以下载它们。

我知道我可以禁用"下载按钮"使用$_SESSION,例如:

$downloadbutton = "<a href='abc.jpg'>Download</a>";
if($_SESSION["xy"] == "abc"){
    echo $downloadbutton
}

可以通过www.url.com/directpath/abc.jpg

访问该文件

那么如何保护文件呢?

3 个答案:

答案 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并将会话验证添加到其中。