2009-02-05 45 views
0

我不想阻止用戶多次點擊相同的ajax按鈕,但我想要執行一些控制以防止有人惡意地重複點擊按鈕,這會導致重複的數據庫請求。在asp.net mvc中處理jquery .post的簡單方法是什麼?如果我延遲了一段時間,客戶端體驗將被破壞(?)如何控制重複的Ajax'post'提交?

回答

6

爲什麼不在單擊後禁用按鈕,然後在收到服務器響應後重新啓用它?

+0

重複我的回答 – 2009-02-05 23:23:57

+0

簡單,有效,有一些方法可以發送請求,而不點擊按鈕,但你只是想使它足以讓普通人難以從做氣餒它。 – Mark 2009-02-05 23:55:23

1

在請求完成之前禁用按鈕?

1

您可以將按鈕放在定時器上,一旦按下它,它將在X秒內被禁用,或者直到它從服務器收到響應。

2

在您的javascript中設置一個標誌,指示未決請求,一旦響應到達未設置標誌。

這樣用戶可以多次點擊按鈕,只要他願意,就只會有一個'主動'請求到服務器。

2

爲什麼不跟蹤用戶按下按鈕的次數,並且每運行一個半秒鐘,就會運行提交查詢的方法以及點擊次數(或者不做任何事情,如果沒有點擊)。另外,在該方法中將點擊數重置爲0,以便下一個查詢將是準確的。

3

這不是客戶端問題,只能在服務器端處理。如果發出AJAX請求,那麼惡意用戶可以直接通過HTTP將AJAX請求直接發送到您的服務器 - 即使對於使用類似WFtechCurl的新手也是如此。

不是要說明這一點,但如果用戶可以多次點擊按鈕,那麼對手也是如此,並且沒有辦法真正確定誰是誰。您可以進行某種限制,將其限制爲每y秒的x次點擊等,但隨後攻擊者也可以限制其點擊率。

1

實際上適用於任何帖子的方法是添加由客戶端生成的隨機令牌。當服務器第一次收到帖子時會記錄該令牌,隨後將使用相同的令牌發出的任何後續請求都會被忽略。

我聽說過關於.Net Rocks #367 with Udi Dahan