2015-06-01 108 views
2

我需要確保在進入產品下載頁面之前,一個人已經登記並填寫了登記表。現在我通過ajax提交表單,如果返回的JSON =成功,我會相應地重定向到相應的下載頁面。我希望保護下載頁面免於直接訪問,以確保我們首先捕獲該潛在客戶。我知道PHP會話和cookie可以被操縱,但它適合我們的需求,我意識到了後果等,只需要做到這一點。使用PHP Sessions/Cookies保護下載路徑?

所以頁面「http://www.example/register.php」我想設置和哈希基於當前時間的餅乾上:

<php 
    $time = ('Y-m-d H:i:s'); 
    //set a new cookie with this value and hash it 
?> 

然後在http://www.example.com/download.php檢查的cookie,如果它被設置和最後一個小時顯示內設置下載內容,如果沒有設置或已過期,重定向回寄存器頁

<php 
    if !$cookie or expred { 
     location('http://www.example.com/register.php'); 
     die(); 
    } else { 
     //download content 
    } 
?> 

我知道這個例子非常rudementary,但我可以利用一些幫助得到正確的道路上。我讚賞它!

回答

1

您需要在每頁的頂部使用session_start(),否則無法讀取或寫入任何會話數據。

完成此操作後,您將更改$ _SESSION全局中的會話變量。要設置時間,請嘗試$_SESSION['time'] = time()。這將以秒爲單位保存當前時間(Unix時間戳)。爲了計算,如果時間設爲大於一小時前使用此:

session_start(); 
// 60 seconds * 60 minutes = 3600, or 3600 = seconds in an hour 
if(time() - $_SESSION['time'] > 3600) { 
    // Current time - survey_time is greater than one hour (expired) 
    header('Location: /survey/page/url/'); 
} else { 
    // Not expired - do stuff 
} 

讓我知道如果您有任何問題!

+0

謝謝你的幫助!我根據需要現在開始工作。我將session_start()和$ _SESSION ['time'= time()移到一個單獨的文件中,然後在我的表單提交I $ .post的成功處理程序中啓動會話,所以它唯一有效的AFTER成功表格提交。最後一個問題是,有多個Ajax提交會開始會話,我如何清除所有會話,然後開始一個新的會話? –

+0

@DirtyBirdDesign'session_start()'有點欺騙,它會啓動會話或抓取現有會話(如果該會話存在的話)。我認爲默認情況下,他們會在閒置30分鐘後過期。所以每個頁面實際上使用相同的會話(針對該用戶)。如果你想強制一個新的會話,你可以使用'session_destroy()'(首先使用session_start),但這真的是一個註銷頁面。希望這有助於! –