Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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
Javascript 防止客户端滥用/欺骗奖励用户的重复Ajax调用_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 防止客户端滥用/欺骗奖励用户的重复Ajax调用

Javascript 防止客户端滥用/欺骗奖励用户的重复Ajax调用,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在做一个硬币计划,奖励在我的网站上的会员。我的程序会生成两个随机数并进行比较,如果它们相同,则会得到一枚硬币。我遇到的问题是,有人可以进入控制台获得“免费”硬币。他们也可能通过打开更多的标签或者制作一个程序来产生更多的硬币来欺骗我,我正试图阻止他们。我正在考虑将其从js转换为php以阻止作弊(大部分情况下),但我不知道如何做到这一点。有关守则是: $.ajax({ type: 'post', url: '/version2.0/coin/coins.php', dat

我正在做一个硬币计划,奖励在我的网站上的会员。我的程序会生成两个随机数并进行比较,如果它们相同,则会得到一枚硬币。我遇到的问题是,有人可以进入控制台获得“免费”硬币。他们也可能通过打开更多的标签或者制作一个程序来产生更多的硬币来欺骗我,我正试图阻止他们。我正在考虑将其从js转换为php以阻止作弊(大部分情况下),但我不知道如何做到这一点。有关守则是:

$.ajax({
    type: 'post',
    url: '/version2.0/coin/coins.php',
    data: {Cid : cs, mode : 'updateCoins'},
    success: function (msg) {
        window.msg=msg;
    }});
控制台的代码是一个循环。在上面的代码中,“cs”是成员的id,因此用他们的id替换它将使他们获得他们想要的所有硬币


我应该有一个上面有变量的include吗?但是,我将如何显示包含当前硬币数量的成功消息。此外,此代码位于每15毫秒重复一次的setInterval函数中。

有多种方法可以做到这一点,但可能最简单的方法是输入服务器端代码-当收到请求时,检查最后一次硬币更新的时间,如果没有,您可以运行币码,并将此操作的时间保存在他们的会话中。如果有存储的时间,请确保该时间超出所需时间。如果是,则继续硬币更新。如果不是,只需用403或其他故障代码响应即可

在伪代码中:

if (!$userSession['lastCoinTime'] || $currentTime + $delay > $userSession['lastCoinTime']) {
  // coin stuff
  $userSession['lastCoinTime'] = // new time
} else {
  // don't give them a chance at coin, respond however you want
}
但是,因为您说的是每15毫秒检查一次,所以我会使用WebSocket,以便与服务器的连接持续进行。无论哪种方式,逻辑都可以比较


万一有任何不确定性,一定要在服务器上执行所有硬币逻辑。您永远不能信任用户输入的有效数据。根据身份验证的设置方式,您最多可以信任的是某种只有他们才会拥有的密码,这种密码只会让您知道他们是谁,这是一种用于替代持久会话的技术。除非你这样做,否则你会依赖会话来知道用户是谁——当然也不要让他们告诉你

为什么不给更新加上时间戳呢?每X小时/天更新一次。如果用户试图欺骗系统并提交更多硬币,您可以检查上一次更新,如果更新太早/接近上一次更新,您可以拒绝它。(假设您正在保存硬币/服务器端更新)同时在服务器端生成随机数字最好,因为数字无法更改。我现在有一个时间戳来帮助我查找作弊者,您认为多久会太早?所有内容都保存在服务器端。这取决于您希望允许他们运行此coin应用程序的频率。如果这是一份礼物,那就是你自己的选择。我的个人输入无效,因为我对你的网站一无所知。可以是每小时一次或每六小时一次,但我建议在服务器端生成随机数,并将上一次当前时间与时间戳进行比较。谢谢,这非常有帮助。