我想做的是每个用户每分钟获得1分。现在我在addpoints.php中有php代码,然后我尝试使用jQuery javascript:
function addpoints() {
var userid = document.getElementById('user_id_points');
var postFile = 'addpoints.php?userid='+ userid.value;
$.post(postFile, function(data){
$("#points").html(data);
setTimeout(addpoints, 60000);
});
}
这非常好用,并且每1分钟给出一个点。但是一个问题是,如果你只是刷新脚本所在的页面,那么你将收到一个点..所以你可能只是刷新页面有时候然后你提高你的分数..
我在考虑在addpoints.php中创建一个检查最后一个日期戳的if()超过1分钟然后给出其他错误..
我只是想知道是否有更好的想法/事情要做,以防止这个小问题?
答案 0 :(得分:3)
存储上次分数增加的日期+时间(使用时间戳),在该分数旁边(在$_SESSION
或数据库中) )确实是一个解决方案:
答案 1 :(得分:0)
基于@Pascal MARTIN的回复,如果解决方案很好,你选择@Pascal MARTIN'回复
function addpoints() {
var userid = document.getElementById('user_id_points');
var postFile = 'addpoints.php?userid='+ userid.value;
$.post(postFile, function(data){
$("#points").html(data.html);
setTimeout(addpoints, data.ts);
});
}
只能在“addpoints_get_ts”中获取时间戳
(function(){
var userid = document.getElementById('user_id_points');
var postFile = 'addpoints_get_ts.php?userid='+ userid.value;
$.get(postFile, function(data){
setTimeout(addpoints, data.ts);
});
})();
答案 2 :(得分:0)
我建议在MYSQL表中添加一列last
。这样,你可以做他们不会作弊。
mysql_query('UPDATE `users` SET `points` = `points`+1, `last`='.time().' WHERE `last` < '.(time()-60).' AND `user_id` = '.intval($_GET['userid']).' LIMIT 1);
此外,您可以使用SESSION变量来确保正确的用户调用脚本,甚至确保用户已登录。;)
答案 3 :(得分:0)
您应该只在$ _SESSIONS中存储时间戳,而不用担心数据库中的内容。您可以采取的防止自动脚本的另一个好处是启用某种身份验证来访问页面,最好使用登录和强大的验证码。还要确保防止形式欺骗并存储相同IP的多个请求并禁止它们。这将阻止有人通过多次刷新来管理你的服务器。您可以使用其他东西来确定它是否自动化,如IP,引荐来源检查等。