如何防止用户一次多次打开同一页面

时间:2013-03-22 08:07:29

标签: php mysql web

在我的网站上,人们通过查看页面获得积分。他们保持页面打开每秒得到1分(页面不断旋转广告)。

有些人已经开始多次打开这个页面,因此获得了更多积分!例如,如果用户打开页面10次,那么他每秒获得10分。我不希望他们每秒收入超过1点。

如何阻止用户同时多次打开该网页?

提前致谢。 注意:我的网站是基于PHP的。

3 个答案:

答案 0 :(得分: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-Part(使用jquery):

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

这应该有用。

答案 1 :(得分:0)

添加页面打开到数据库的时间。每当页面打开时,检查时间和当前时间的差异是否小于xx秒,然后重定向用户。如果差异超过xx秒,则更新该时间。

答案 2 :(得分:0)

//--- You make session in startup called (my_form)
if (!empty($_SESSION['my_form'])) 
{
    if ($_SESSION['my_form']== basename($_SERVER['PHP_SELF']))
    {
        header("Location:index.php");
        exit();
    } else {
        $_SESSION['my_form']= basename($_SERVER['PHP_SELF']);
    }
} else {
    $_SESSION['my_form']= basename($_SERVER['PHP_SELF']);
}