2016-02-21 75 views
0

我試圖獲取一些客戶端信息並將每個下載文件請求存儲在數據庫中。存儲所需的所有信息後,下載請求正在處理:在數據庫中存儲唯一的下載請求

return response()->download($file_path); 

的問題是,對每個請求,主要是通過下載管理器,多連接到相同的URL做出這樣的應用程序商店上的同一請求多行用戶。

我想限制每個唯一客戶端請求的存儲不是每個連接。我想防止多重連接會爲我做的,所以我加了Accept-Ranges頭:

return response()->download($file_path, null, ["Accept-Ranges" => "None"]); 

雖然下載沒有恢復,能了,多行存儲在數據庫中。 (但它比以前少得多)

避免在用戶下載請求中插入多個數據庫的最佳做法是什麼?

*請不要接聽或沒有考慮到多個重複和同時請求從多個獨特的和同時請求不同意見。否則,那裏有很多解決方案。

P.S.我不想用Laravel來標記我的問題。請不要添加它。

+2

開始可以給每個下載一個唯一的ID,這將是在URL中可見,並且這將在一定時間到期。所以只要下載恢復使用該ID,你可以認爲它是相同的下載。雖然在發送文件的最後一個範圍時,您必須注意是否過期鏈接。這只是一個意見。 – frz3993

+0

我認爲這不是一個好的做法。您可能會錯過唯一的下載請求,因爲您不知道該密鑰的過期時間,也許有人會嘗試在該特定時間內多次下載文件。 @ frz3993 – revo

+0

您是否在插入數據庫之前嘗試過檢查'Range'頭值?對於新的/唯一的下載請求,它不應該出現或從0開始。 – max

回答

0

你試過插入到數據庫之前檢查Range頭值?

對於新的/獨特的下載請求時,它不應該被提交或從0

+0

太快了! (y) – revo

+0

只是一個巧合:) – max

+0

我喜歡這種巧合 – revo

0

要了解唯一身份用戶,您需要身份驗證系統。但我看到你無法使用認證系統。

沒有任何絕對的方法來做到這一點。用戶可以更改IP地址,刪除或更改cookie等,因爲一切都在他們手中。

你仍然可以插入的ip,HTTP_USER_AGENT數據庫,也可以提高質量,您可以設置一些餅乾識別唯一的用戶。

此外,您可以使用PHP Sessions - 用於用戶管理系統。

session_start(); 
$id = session_id(); 

檢查當前會話用戶。如果已經有相同用戶的下載請求,則更新請求,如果沒有創建一個。

更新:

如果您正在使用的會話和驗證,按您的評論則存儲時,下載請求時:

+----+---------+---------+-------------+-----------------+-----------------+ 
| id | user_id | file_id | status  | created_at  | updated_at  | 
+----+---------+---------+-------------+-----------------+-----------------+ 
| 1 | 1  | 1  | in_progress | 1456477761.9624 | 1456477762.9624 | 
+----+---------+---------+-------------+-----------------+-----------------+ 

當身份驗證的用戶請求,下載特定文件,在DB添加行指定它的狀態。每當有新的下載文件請求到來時,您都會檢查該用戶和請求的文件的狀態。如果記錄存在,那麼你將不允許用戶下載文件。

+0

如何存儲用戶的IP地址和用戶代理可以導致找到唯一的請求?在發送下載請求之前,用戶也被認證。這就是爲什麼我需要一些關於他們的下載請求的信息。 – revo

+0

那麼,爲什麼你不能使用會話來確定下載請求呢? –

+0

使用會話我們如何跟蹤唯一的下載請求?當前用戶在下載時是否可以向同一文件發送另一個下載請求?如果是,那麼應該如何實現會話以識別導致在數據庫中僅存儲2行的差異? – revo

0

您可以嘗試存儲用戶代理,並檢查與evry請求如果用戶代理相同,但用戶可能會嘗試通過不同的瀏覽器/下載管理器同時下載,因此沒有充分的證據。 但 既然你在你所不支持/允許用戶恢復下載的問題已經提到.. 因此,用戶已經開始下載他可能會嘗試通過不同的瀏覽器下載,但用戶IP地址的可能性後得到改變是非常少的...... 所以你可以存儲用戶browsr代理+用戶IP地址,並與每個請求檢查它們是否同您的數據庫進行新的條目之前.. 這可能不是100%的證據,但即時猜測你的問題將會得到解決!

相關問題