2012-12-24 16 views
1

好吧,我正在使用頁數統計用戶訪問profile.php的時間。如果他們沒有登錄,他們只能查看5個用戶配置文件。如果訪問頁面的次數超過5次而忽略某些頁面,則將訪問者重定向到其他網址。

每個配置文件都有profile.php的擴展名,例如。 profile.php?id = 1或id = 2等

頁面計數工作正常,基本上如果用戶嘗試點擊超過5個配置文件,它會將它們重定向到limit.php頁面,告訴用戶他們已達到他們的限制和登錄以查看更多。

我已經將它設置爲排除如下所列的幾個配置文件。

基本上是什麼問題,如果用戶點擊排除的配置文件,如99999或99998,它不會將用戶重定向到limit.php頁面。這很好,因爲我希望它排除這些配置文件,但是,如果用戶點擊另一個配置文件,如1或8等之間,用戶試圖重新訪問99999或99998,那麼它不會讓他們和重定向他們?

任何人都可以告訴我如何編輯腳本仍然允許用戶訪問配置文件99999或99998,甚至在他們訪問其他配置文件之前或之後沒有重定向他們?

希望這是明確的。謝謝

<?php 

    !session_id() ? session_start() : null; 
    if(!isset($_SESSION['page_access_count'])){ 
     $_SESSION['page_access_count'] = 1; 
    }elseif($_SESSION['page_access_count'] >= 6){ 
     // redirect to signup page 
     header('Location: limit.php'); 
     exit; 
    } 

     $free_profiles = array(99999,99998,99997,99996,99995,99994,99993); // array of profile IDs to exclude 

    if (! in_array($_GET['id'], $free_profiles)) { 
     $_SESSION['page_access_count']++; 
    } 


     ?> 

回答

1

我在一個函數verify_profile_visit_limit中封裝了極限驗證邏輯。現在我們可以使用$_GET(因爲它是一個查詢字符串)來獲取頁面的「id」,並使用return函數退出verify_profile_visit_limit函數,從而跳過限制檢查,看它是否在$free_profile陣列中。

!session_id() ? session_start() : null; 

verify_profile_visit_limit(); 

function verify_profile_visit_limit(){ 
    $free_profiles = array(99999,99998,99997,99996,99995,99994,99993); 

    if(in_array($_GET["id"], $free_profiles)) return; 

    if(! isset($_SESSION["page_access_count"])){ 
     $_SESSION["page_access_count"] = 0; 
    } 

    $_SESSION["page_access_count"]++; 

    if($_SESSION["page_access_count"] > 5){ 
     header("Location: limit.php"); 
     exit(); 
    } 
} 
+0

+1您可能還想爲您的答案提供解釋。 – mellamokb

+0

正在編輯中。 –

相關問題