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

问题描述:

所以,我有一个混合的游戏应用程序,我有一个奖励制度,在我的游戏:Javascript |如何避免Date.now()操作

if(Date.now() - lastFreeCoinsTime > 3600000){ //lastFreeCoinsTime is also Date.now() 
    giveCoins(); 
    lastFreeCoinsTime = Date.now(); 
} 

每隔一小时就可以得到金币的X量。 我发现它可以很容易地通过执行以下操作: 电话设置:更改日期(例如18/03 - > 23/03) 现在您可以再次获得奖励。 我该如何避免它?

+0

在服务器上使用'redis'来存储用户是否已经收到奖励并设置1小时过期到该密钥;从服务器而不是客户端获得时间;将先前的奖励时间存储在localStorage/sessionStorage/cookies中,并确保Date.now()不小于前一次;不要让作弊者玩你的游戏;-) –

+0

检查一个独立的来源,用户不能篡改。 – RobG

+1

相关“获取当前GMT世界时间 ”:http://stackoverflow.com/questions/489581/getting-the-current-gmt-world-time –

我不认为你可以避免这种特殊的行为,但是如果当前时间在lastFreeCoinsTime之前,你可以通过再次减少他们的硬币来防止他人滥用它。如果Candy Crush的创作者无法绕过它,那就相当艰难。

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

请考虑是否真的值得努力防止用户“欺骗”,尽管如此。如果您的奖励系统是以某种“免费增值”模式设计出来的,那么您显然需要考虑如何确保和控制奖励。但是,如果这是一款休闲或免费游戏,而且风险很低,那么它真的很重要吗?只有很小一部分用户会花时间去尝试和欺骗。如果他们这样做,谁在乎?让他们按照他们想玩的方式来玩游戏 - 毕竟他们在那里玩得开心。