如何在用户登录时授予下载文件的权限
how to give access for downloading a file when user is logged in
我在子文件夹中有一些 .zip
文件,用户登录后可以下载这些文件。
为了防止未登录的用户下载这些文件(并且知道某个 zip 文件的路径),我在 .htaccess
中使用此代码
<FilesMatch "\.(zip)$">
Order Allow,Deny
Deny from all
</FilesMatch>
问题是:如果用户登录,他也被阻止下载文件
如何在登录时授予文件访问权限,在未登录时阻止文件下载?
每个示例 zip 文件存储在:www.mydomain.com/data/downloads/download.zip
通过 PHP 提供文件,您可以使用 PHP 会话检查用户是否已登录。
可以做这样的事情...(显然在用户登录时在会话中设置一些合适的东西):
<?php
session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
// or however you get the path
$yourfile = "/path/to/" . $_GET['file']. ".zip";
$file_name = basename($yourfile);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));
readfile($yourfile);
exit;
} else {
echo "Please log in first.";
}
?>
显然,您可以将文件名作为查询字符串参数传递,并在 $yourfile 中使用它来提供适当的文件。如果这样做(这是正确的做法),可以在提供文件之前进行一些检查以确保文件存在。
示例用法如下:download.php?file=file1.zip
上面的例子假设你没有使用任何框架(即Laravel、CakePHP等),如果你使用框架,我建议使用会话objects/functions可用。
将文件存储在 webroot 之外也是最佳做法,这样可以确保它们受到保护。但这也适用于您的情况,只需将 $yourfile 设置为 /data/downloads 的绝对路径即可。这样做你不需要 .htaccess 的东西。
我在子文件夹中有一些 .zip
文件,用户登录后可以下载这些文件。
为了防止未登录的用户下载这些文件(并且知道某个 zip 文件的路径),我在 .htaccess
<FilesMatch "\.(zip)$">
Order Allow,Deny
Deny from all
</FilesMatch>
问题是:如果用户登录,他也被阻止下载文件
如何在登录时授予文件访问权限,在未登录时阻止文件下载?
每个示例 zip 文件存储在:www.mydomain.com/data/downloads/download.zip
通过 PHP 提供文件,您可以使用 PHP 会话检查用户是否已登录。
可以做这样的事情...(显然在用户登录时在会话中设置一些合适的东西):
<?php
session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
// or however you get the path
$yourfile = "/path/to/" . $_GET['file']. ".zip";
$file_name = basename($yourfile);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));
readfile($yourfile);
exit;
} else {
echo "Please log in first.";
}
?>
显然,您可以将文件名作为查询字符串参数传递,并在 $yourfile 中使用它来提供适当的文件。如果这样做(这是正确的做法),可以在提供文件之前进行一些检查以确保文件存在。
示例用法如下:download.php?file=file1.zip
上面的例子假设你没有使用任何框架(即Laravel、CakePHP等),如果你使用框架,我建议使用会话objects/functions可用。
将文件存储在 webroot 之外也是最佳做法,这样可以确保它们受到保护。但这也适用于您的情况,只需将 $yourfile 设置为 /data/downloads 的绝对路径即可。这样做你不需要 .htaccess 的东西。