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文件。或者只是设置一个断点。等等。真相的最终来源需要在服务器端。