Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止用户一次多次打开同一页面_Php_Mysql_Web - Fatal编程技术网

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

Php 如何防止用户一次多次打开同一页面,php,mysql,web,Php,Mysql,Web,在我的网站上,人们通过查看页面来获得积分。他们每打开一秒钟就得1分(页面不断旋转广告) 有些人已经开始利用这一点,打开该页面多次在一起,因此正在赚取更多的分数!例如,如果用户打开页面10次,那么他每秒可以获得10分。我不希望他们每秒挣超过1分 如何防止用户同时多次打开该页面? 提前谢谢。 注意:我的网站是基于php的。我想到了一种简单但不可靠的方法: 将Sessionvar设置为 $_SESSION['user_already_on_page'] = true; 现在,您可以检查此变量并返回错

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

有些人已经开始利用这一点,打开该页面多次在一起,因此正在赚取更多的分数!例如,如果用户打开页面10次,那么他每秒可以获得10分。我不希望他们每秒挣超过1分

如何防止用户同时多次打开该页面?

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

我想到了一种简单但不可靠的方法:

将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.
}

这应该有效。

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

I是否有登录机制?如果是这样,则允许用户只登录一次,方法是向数据库中添加一些表,其中包含用户是否登录的信息。您可以在每个页面的用户版本中设置cookie或变量。在每一页中检查该变量。如果设置重定向他或做你想做的事。如果没有,请打开页面!您不能阻止他们多次打开同一页面,但您可以阻止他们为此获得多个积分。您当前的积分系统是如何工作的?@Sankalp Mishra-如果他们禁用cookie怎么办?我想在这里使用会话会很好!如果用户突然退出,例如,如果他的互联网断开连接,那么他能再次打开该页面吗?@Max不幸的是不能。但是您可以通过检查最后一个DB条目来解决这个问题。比如
if($\u SESSION['user\u ready\u on\u page']){}
。如果最后一个条目超过xx秒,用户可以继续访问该站点。我添加了页面打开到数据库的时间。如果该时间与当前时间之差小于xx秒,则我重定向用户。我的问题已经解决:)@Max但这也可以被破解!他们只需要等几分钟。如果用户打开该页面,直接关闭它,然后再次打开它,会发生什么。他也会被重新定向。。?!但这也可以被引爆!他们只需要等待几分钟/秒。如果用户打开该页面,直接关闭它,然后再次打开它,会发生什么。他也会被重新定向@Benedikt Mokroß-每次用户得分时,时间都会更新,因此即使他们在几分钟后重新打开,他们也会被抓到。如果用户在关闭后再次打开它,那么他也会被重定向,重定向页面上会写下发生了什么,用户会在特定时间后自动重定向到前面的页面。
//--- 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']);
}
$(window).bind('beforeunload', function(eventObject) {
    $.ajax({url:'./ajax/unsetonpage.ajax.php',type:'GET'});
});
//--- 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']);
}