Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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 |如何避免Date.now()操作_Javascript - Fatal编程技术网

Javascript |如何避免Date.now()操作

Javascript |如何避免Date.now()操作,javascript,Javascript,所以,我有一个混合游戏应用程序,我的游戏中有一个奖励系统: if(Date.now() - lastFreeCoinsTime > 3600000){ //lastFreeCoinsTime is also Date.now() giveCoins(); lastFreeCoinsTime = Date.now(); } 每小时你可以得到X数量的硬币。 我发现,通过执行以下操作可以很容易地对其进行操作: 电话设置:更改日期(例如18/03->23/03) 现在你可以再次获得奖励了

所以,我有一个混合游戏应用程序,我的游戏中有一个奖励系统:

if(Date.now() - lastFreeCoinsTime > 3600000){ //lastFreeCoinsTime is also Date.now()
  giveCoins();
  lastFreeCoinsTime = Date.now();
}
每小时你可以得到X数量的硬币。 我发现,通过执行以下操作可以很容易地对其进行操作: 电话设置:更改日期(例如18/03->23/03) 现在你可以再次获得奖励了。
我怎样才能避免它呢?

我不认为你可以避免这种特殊的行为,但如果当前时间比上次免费硬币时间早,你可以通过再次减少硬币数量来防止人们一次又一次地滥用它。如果Candy Crush的创建者无法绕过它,那一定会非常困难。

像这样的用户奖励应该由外部服务器处理,这是您可以控制的。这样,您就可以跟踪自己的时间和其他数据,客户端(您的游戏)从服务器获取信息,这是唯一的真相来源。缺点显然是,你的用户需要有互联网连接才能获得奖励。但只要游戏的核心功能在没有互联网连接的情况下可以玩,他们就可以在离线状态下玩游戏,并且只需要连接一小部分额外功能(如奖励)就可以了


不过,请考虑一下,为防止用户“作弊”而付出的努力是否真的值得。如果你的奖励系统是以某种“免费”模式为你赚钱而设计的,那么你显然需要对如何确保和控制奖励进行大量思考。但如果这是一个随意或免费的游戏,而且赌注很低,这真的重要吗?只有一小部分用户会真正花时间尝试作弊。如果他们这样做了,谁在乎呢?让他们按照自己想玩的方式玩游戏——毕竟这是为了让他们玩得开心。

使用服务器上的
redis
来存储用户是否已经收到奖励,并将密钥设置为1小时到期;从服务器而不是客户端获取时间;将以前的奖励时间存储在localStorage/sessionStorage/cookies中,并确保
Date.now()
不少于以前的时间;不要让骗子玩你的游戏;-)与用户无法篡改的独立来源核实。相关的“获取当前GMT世界时间”:你应该存储并加载coins服务器端任何客户端可以处理的内容,但要注意的是,一旦JS在机器上,他们几乎可以做他们想做的事。或者设置代理在页面加载时加载修改过的JS文件。或者只是设置一个断点。等等。真相的最终来源需要在服务器端。