如何控制重复的Ajax'post'提交?

时间:2009-02-05 22:46:49

标签: asp.net javascript asp.net-mvc asp.net-ajax

我不想让用户多次单击相同的ajax按钮,但是我想要进行一些控制以防止有人恶意地反复点击按钮,这会导致重复的数据库请求。什么是在asp.net mvc中的jquery .post上处理这个的简单方法?如果我延迟时间,体验客户端将被破坏(?)

7 个答案:

答案 0 :(得分:6)

为什么不在单击按钮后禁用该按钮,然后在收到服务器的响应后重新启用它?

答案 1 :(得分:3)

这不是客户端问题,只能在服务器端处理。如果正在进行AJAX请求,那么恶意用户可以直接通过HTTP将AJAX请求直接发送到您的服务器 - 即使对于使用WFtechCurl之类的新手来说,这也是非常微不足道的。

不说明显,但如果用户可以多次点击一个按钮,那么对手也是如此,而且无法确定谁是谁。您可以进行某种限制以将其限制为每秒y次的x次点击等,但攻击者也可以限制其点击率。

答案 2 :(得分:2)

在javascript中设置一个指示待处理请求的标志,一旦响应到达,则取消设置标志。

这样用户可以按照自己的意愿多次点击按钮,只会向服务器发出一个“有效”请求。

答案 3 :(得分:2)

为什么不跟踪用户按下按钮的次数,每隔一秒或半秒,您运行方法提交查询以及点击次数(或不做任何事情,如果没有点击)。此外,在该方法中,将点击次数重置为0,以便下一个查询准确无误。

答案 4 :(得分:1)

在请求完成之前禁用该按钮?

答案 5 :(得分:1)

您可以将按钮放在计时器上,这样一旦按下,它将被禁用X秒或直到它收到服务器的响应。

答案 6 :(得分:1)

实际应用于任何帖子的方法是添加客户端生成的随机令牌。当服务器在第一次记录令牌时收到帖子时,随后会忽略带有相同令牌的任何后续请求。

我在.Net Rocks #367 with Udi Dahan

上听到了这个消息