2013-03-22 97 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