在我的网站上,人们通过查看页面来赚取积分。他们保持页面打开的每一秒(页面不断旋转广告)获得 1 分。
有些人已经开始通过多次打开该页面来利用这一点,因此获得了更多积分!例如,如果用户打开页面 10 次,那么他每秒获得 10 分。我不希望他们每秒赚取超过 1 分。
如何防止用户同时打开该页面多次?
提前致谢。注意:我的网站是基于 php 的。
我想到了简单但不可靠的方式:
设置一个像
$_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'});
});
这应该有效。
将页面打开的时间添加到数据库中。每当打开页面时,检查该时间和当前时间的黑白差异是否小于 xx 秒,然后重定向用户。如果差异超过 xx 秒,则更新该时间。
//--- 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']);
}