2013-03-22 100 views
0

在我的網站上,用戶通過查看頁面可以獲得積分。他們每秒得到1分他們保持打開頁面(頁面不斷旋轉廣告)。如何防止用戶每次多次打開同一頁面

有些人已經開始通過多次打開該頁面一起利用這一點,因此都賺更多的積分!例如,如果用戶打開該頁面10次,則他每秒獲得10分。我不希望他們每秒賺取超過1分。

我怎樣才能防止用戶打開該頁面不止一次在同一時間?

在此先感謝。 注:我的網站是基於php的。

+0

我有任何登錄機制?如果允許用戶登錄,則只需登錄一次,即可在用戶登錄時通過向數據庫添加信息並添加信息。 – Damian0o 2013-03-22 08:10:48

+0

您可以爲每個頁面的用戶設置cookie或變量。並在每個頁面中檢查該變量。如果設置重定向他或做你想做的。如果不是,請打開頁面! – 2013-03-22 08:11:03

+1

你不能阻止他們多次打開同一頁面,但你可以防止他們獲得多個點。你現在的積分系統是如何工作的? – deceze 2013-03-22 08:11:16

回答

0

添加頁面打開到數據庫的時間。無論何時打開頁面,檢查是否存在時間和當前時間的差異小於xx秒,然後重定向用戶。如果差異超過xx秒,則更新該時間。

+0

但是這也可以被利用!他們只需要等待幾分鐘/秒。如果用戶打開該頁面,直接關閉並再次打開該頁面會發生什麼情況。他也會被重定向..?! – 2013-03-22 09:24:41

+0

@BenediktMokroß - 每次用戶獲得積分時,都會更新時間,即使他們在幾分鐘後重新打開,他們也會被捕獲。如果用戶在關閉後再次打開它,那麼他也將被重定向,並且在重定向的頁面上它將被寫入發生了什麼,並且在特定時間之後用戶將自動被重定向到較早的頁面。 – Max 2013-03-23 06:36:00

0

我對很容易,但沒有可靠的方法記:

設置一個Sessionvar像

$_SESSION['user_already_on_page'] = true; 

現在你可以檢查這個變量,並返回一個錯誤頁面或類似的東西。

if($_SESSION['user_already_on_page']) 
{ 
    //maybe the user has left unexpected. to workaround this we have to check 
    //for the last db entry. Examplecode: 
    $query = mysql_query($_db,'SELECT LastUpdated FROM Pointstable WHERE U_Id = $uid'); 
    $row = mysql_fetch_array($query); 
    if((time()-$row['LastUpdated']) < 5) 
    { 
     die("You are already on this page!"); 
    } 
    //$_SESSION['user_already_on_page'] is set but the last update is older than 5 sec 
    //it seems, that he unexpectedly lost connection or something like that. 
} 

要取消設置此變量,您可以在pageclose上觸發一個AJAX腳本來取消設置此變量。 所以你unsetonpage.ajax.php看起來是這樣的:

<?php $_SESSION['user_already_on_page'] = false;?> 

而且你的JS-部分(使用jQuery):

$(window).bind('beforeunload', function(eventObject) { 
    $.ajax({url:'./ajax/unsetonpage.ajax.php',type:'GET'}); 
}); 

這應該工作。

+0

如果用戶突然退出,例如他的互聯網斷開連接,那麼他是否能夠再次打開該頁面? – Max 2013-03-22 08:35:22

+0

@Max不幸的不是。但是,您可以通過檢查最後一個DB-Entry來解決這個問題。就像'if($ _ SESSION ['user_already_on_page']){檢查最後一個輸入是否超過XX秒}「。如果最後一項比xx秒早,則用戶可以繼續訪問該站點。 – 2013-03-22 08:48:11

+0

我添加了頁面打開到數據庫的時間。如果時間和當前時間之間的差異小於xx秒,那麼我重定向用戶。我的問題已經修復:) – Max 2013-03-22 09:16:58