我原來的答覆:
您將需要存儲(在數據庫或會話變量)的用戶可以訪問哪些項目,每個你會生成一個唯一的隨機令牌。該令牌將用於識別購買的物品。將令牌傳遞給他們可以下載的頁面(在會話變量,POST參數中,或作爲url中的最後一個選項,即GET)。在需要下載的頁面中,您將使用會話信息查詢數據庫/會話變量,以識別客戶和傳遞的令牌(但是您是否通過它),並檢索要下載的文件。
如果您需要保留重新下載的購買物品清單,您也可以這樣做,但請記住在用戶請求下載時再次創建令牌。如果您喜歡,也可以添加到期日期。
現在我已經通過引用答案我想你將需要怎麼做更詳細的性質提到了幾個備選方案,然後再。
可能厄尼是正確的,我不應該假設你有一個會議。可能是我應該告訴你如何做一個會話。
所以我會選擇其中一個選項來執行,最簡單的選項。
<?php
//Oh, I'm in a PHP page...
//check if there is not a session
if (session_id() != '')
{
//Ok, there is no session, let's create one
session_start();
}
//Now we are sure there is a session
//Let's store in the session the id of the file I want to allow to download
$_SESSION['download'] = GetFileId();
//GetFileId will do some mambo jambo expecto patronum to return an id
//The id will be 38a205ec300a3874c867b9db25f47c61 or something
?>
在下載頁面
現在....
<?php
//Oh, I'm in another PHP page...
//check if there is not a session
if (session_id() != '')
{
//no session? screw you, no download for you
header('Location: sorry.php');
}
else
{
//Now we are sure there is a session
//Let's get from the session the id of the file I want to allow to download
$id = $_SESSION['download'];
//Now get the url to redirect to allow the download
$url = GetUrl($id);
//GetUrl will do some mambo jambo expecto patronum to return an url
//Ok, now we are going to return that file...
//So put the correct MIME type
header('content-type: image/gif'); //if it is a gif...
//Load the file
$contents = file_get_contents($url);
echo $contents;
//That's the only output
exit();
}
?>
請注意,我這樣做只允許訪問從PHP文件,這樣我就可以先驗證用戶是否有權訪問。你不應該讓用戶只是把網址(即使他不能猜到)和訪問文件。因此,如果您正在運行服務器,則希望將這些文件放在服務器Web文件夾之外,或者如果您使用託管服務,則使用.htaccess(或託管提供的其他機制)保護它們。
Comenting這個解決方案:
它操作簡單,易於實現。然而它有一些缺點:
- 如果會話在下載之前終止,用戶失去了他的錢*。
- 有沒有明確的方式實施重新下載。
- 它仍然容易受到會話劫持的影響(我知道,但是最好是安全的)。
*:假設連接丟失,並且會話在客戶端中過期。哦,不,我們不需要任何滿意的顧客。
所以,你真的,真的,需要一個數據庫來支持這一行動,並創建隨機令牌,preferibly與到期日期。
...他們怎麼樣才知道7c8ddc86c0e4c14517b9439c599f9957? – ceejayoz
是不是很明顯的ceejay?那是我想到的第一個散列 – AlienWebguy
你的散列對應什麼?例如他們對特定的文件,或者他們建立了用戶,文件等?無論如何,聽起來好像你害怕有人猜測隨機散列是有效的。 。 。除非你想要定時清理哈希並使它們過期,這聽起來像是你必須處理的事情? – ernie