2014-02-12 71 views
-1

我已經在我的網站中提供了直接下載鏈接,如下所示。php允許只有在會話/ cookie處於活動狀態時才能下載

<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

使用if語句來檢查會話/ cookie並相應輸出 – ElefantPhace

+1

創建一個php腳本,用於檢查會話變量,讀取文件併發送強制下載標題。有關於如何做到這一點的一千篇文章。 –

+0

@ElefantPhace @ElefantPhace:即使設置,任何人都可以手動輸入鏈接並獲取文件 – logan

回答

3

如果是我,我會用這樣的事情。如果你正在尋找具體的下載否認基礎上,會議從用戶

if($_SESSION['login']===1 || $_COOKIE['login']===1){ 
    echo '<a href="myfile.pdf">Download here</a>'; 
} 

的未登錄完全隱藏鏈接被點擊該鏈接後, ,你將不得不設置一些類型的腳本來處理上面的代碼並返回你想要的文件。

編輯:

OK,然後將其鏈接到該檢索從非訪問的位置的文件,並將其反饋以相同的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語句。

+0

即使設置,任何人都可以手動輸入鏈接並獲取文件 – logan

+0

查看編輯答案... –

+0

它說,警告:無法修改標頭信息 - 標頭已發送 – logan

相關問題