Javascript 限制客户端操作(服务器控制)

Javascript 限制客户端操作(服务器控制),javascript,mysql,ajax,node.js,timer,Javascript,Mysql,Ajax,Node.js,Timer,在我正在进行的一个小项目中,客户端可以通过点击网页中的按钮来执行操作。通过点击这些按钮,他可以触发对服务器有影响的事件。我想禁止客户端太频繁地触发事件(例如,他只能在上次触发后5分钟内触发) 只有注册的客户端才能触发事件,这意味着每个客户端都有一个会话id和数据库中的一个条目。我所做的限制客户端操作的工作是在触发事件时更新数据库状态,并在下次调用时检查相同的状态 流程示例:客户端单击按钮-->调用服务器-->检查数据库中客户端的状态-->如果状态为0,则触发事件,将状态更新为1并启动计时器--如

在我正在进行的一个小项目中,客户端可以通过点击网页中的按钮来执行操作。通过点击这些按钮,他可以触发对服务器有影响的事件。我想禁止客户端太频繁地触发事件(例如,他只能在上次触发后5分钟内触发)

只有注册的客户端才能触发事件,这意味着每个客户端都有一个会话id和数据库中的一个条目。我所做的限制客户端操作的工作是在触发事件时更新数据库状态,并在下次调用时检查相同的状态

流程示例:客户端单击按钮-->调用服务器-->检查数据库中客户端的状态-->如果状态为0,则触发事件,将状态更新为1并启动计时器--如果状态为1,则不执行任何操作

我目前面临三个问题


无法足够快地限制客户端操作

如果客户端在调用到达服务器时单击过快,则数据库状态仍然为0。它允许在更新数据库状态之前多次调用触发器事件。在超快速点击的最坏情况下,“一次”触发大约6个事件

我认为我可以在客户端限制客户端操作,至少可以补偿安全服务器限制延迟。然而,我不确定这是否是100%安全的,因为我听说客户是不可信的。即使在很短的时间内相信他也会很危险,不是吗

不确定如何跟踪多玩家触发计时器

在一些客户端触发事件后,我启动一个服务器端计时器,当完成时,该计时器会将客户端触发状态更新回0,这将允许他再次触发事件。代码示例如下:

function ControlEventTrigger (user_id,time) {

   var timer = setInterval(function() {  
     if(time == 0) {
        UpdateDatabaseState(user_id);  
        clearInterval(timer);
     } 
     time--;
   },1000);

}
这是处理多个客户机的好解决方案吗

向客户端显示直到下一个可能触发的时间,即使客户端重新加载页面

目前,我可以通过从服务器端返回一个可变时间来通知客户端剩余的时间,直到他能够触发一个新事件为止,该时间用于跟踪服务器端事件计时器,在本例中,用于跟踪客户端计时器。我在事件触发器发生时返回该值一次。两个计时器几乎在同一个精确时间启动,在客户端,他可以看到计时器随着时间的推移而减少。(两个定时器之间的延迟最小)

我还希望获得直到下一个事件触发的时间,即使用户重新加载页面。现在,当用户重新加载页面时,在下一个事件触发之前,我无法访问剩余的时间。我想我需要访问服务器定时器函数,获取用户在特定时刻的时间值并返回它


通信客户端服务器是基于ajax的。如有需要,我可以给予更多澄清。多谢各位