我有一個PHP文件,其中有一個按鈕,我想下載一個文件的幫助,我想嘗試使用AJAX調用PHP,(因爲,我覺得它更安全),目前,我有以下代碼...如何知道用戶是否已下載文件
<a onclick="download_file (<?= $row["id"]?>)">Download</a>
然後download_file的功能如下:
function download_file (fileid)
{
$.ajax
({
type: "POST",
url: 'download.php',
data: {id: fileid},
success: function(data)
{
window.location = 'download.php?link='+data;
}
});
}
現在這是什麼一樣的是,它首先調用download.php
與POST
請求(以保持位置更安全一點)fileid
,以便腳本從數據庫中提取文件的位置並將其作爲data
變量返回給AJAX腳本。
現在什麼接下來的是,在成功的功能,download.php
再次調用,但這次有了GET
請求,然後將文件進行搜索,改名(如服務器,他們有隨機的文件名),然後下載...造成這種情況的PHP代碼:
header("Cache-Control: private");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$file."");
header("Content-Transfer-Encoding: binary");
header("Content-Type: binary/octet-stream");
readfile ($link);
現在,一切都完美的作品,我擔心的是安全,我想使文件更加安全,我想會產生類似的隨機和獨特的下載鏈接,後下載已經完成,鏈接被關閉,但文件保持不變...我想過一種方法來創建一個臨時文件與另一個地址,並使用cron作業刪除臨時文件,但是這給了cron作業的特定時間間隔一段時間的窗口,下載鏈接將是靜態的,這對於站點是不利的......我希望單個鏈接對於單個下載應該是有效的(但鏈接應該在整個下載,即RESUME應該支持)。
或者如果可能的話,我是否也可以使用身份驗證,例如用戶已登錄,下載鏈接將處於活動狀態,但只要用戶退出應用程序並打開下載鏈接,它應該提示用戶登錄任一或顯示404錯誤...
而且我也想的是如何通過任何其他方法來提高相同的安全建議...
但是我怎麼知道用戶已經完成了下載? –
我不認爲有辦法解決這個問題,因爲下載過程完全在客戶端/瀏覽器上處理。最接近你可以做的是假定用戶已經下載了文件,如果他/她已經開始下載過程。 – pioneer
但是後來我的文件大小隻有10 MB,如果用戶的Internet速度真的很糟糕,就像Kb/s一樣,那麼下載將會失敗,因爲鏈接將被刪除,完成...所以,根本沒有轉移...... –