log*_*gan 0 php cookies session
我在我的网站中提供了一个直接的下载链接,如下所示。
<a href="myfile.pdf">Download here</a>
Run Code Online (Sandbox Code Playgroud)
每个人都可以访问此文件。但我想根据登录用户来限制这个。
假设用户在成功登录后有一个活动会话/cookie,如下所示。
$_SESSION['login'] = 1 or $_COOKIE['login'] = 1
Run Code Online (Sandbox Code Playgroud)
即使设置了以下条件,人们也可以手动输入http://web.com/myfile.pdf并能够下载文件...
if($_SESSION['login']===1 && $_COOKIE['login']===1){
echo '<a href="myfile.pdf">Download here</a>';
}
Run Code Online (Sandbox Code Playgroud)
其他匿名用户应该无法访问该文件。
如果是我,我会使用这样的东西来完全隐藏未登录用户的链接
if($_SESSION['login']===1 || $_COOKIE['login']===1){
echo '<a href="myfile.pdf">Download here</a>';
}
Run Code Online (Sandbox Code Playgroud)
如果您在单击链接后根据会话查找特定的下载拒绝,则必须设置某种类型的脚本来处理上述代码并返回您想要的文件。
编辑:
好的,然后将它链接到一个脚本,该脚本从不可访问的位置检索文件并使用相同的 if/then 语句将其反馈。
就像是
filedownload.php?filename=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.";
}
?>
Run Code Online (Sandbox Code Playgroud)
这是直接从 PHP 手册中复制的。并添加了 if/then 语句。
| 归档时间: |
|
| 查看次数: |
3973 次 |
| 最近记录: |