拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
點擊之後立即停用該按鈕,如果提交失敗,再恢復該按鈕,否則轉成功頁面。
或點擊之後,彈出一個遮罩。
不過,上述兩個方案都要用到 js。為什麼不想用 js 呢?
1.JS button按鈕防止重複點擊
2.服務端 快取控制,方式重複寫函式庫
3.資料庫建立唯一索引(例如 貼文標題唯一,不能重複)
可以從前台和後台來做控制:
新增前台控制邏輯,當使用者點擊發文時,disable「發文」按鈕
添加後台控制邏輯,當發布請求發送過來時,查看此人是否發送標題和內容一樣的帖子,如果存在,則禁止此重複帖子的創建
可以在模板渲染的時候生成1個id,然後提交的時候將這個id一起提交,然後與後端進行比對,這樣如果傳遞過來的id不對,那麼就忽略處理。
第一,比較簡單的解決方案是使用 debounce 函數限制 DOM 回呼觸發的頻率。
第二,如果在這個年代還要考慮用戶把 js 禁用掉的情況,那前端就不要做了。
這個問題只靠前端是解決不了的。
加緩存,單機用map,分散式用redis做緩存。
用Mysql的儲存過程,把並發的壓力交給資料庫
加鎖,樂觀鎖或悲觀鎖
唯一鍵
當前頁面產生一個唯一id,提交的時候服務端判斷只處理一次,例如laravel的表单提交页都有个csrf_token
laravel
csrf_token
那就在後台自己寫一個csrf好了,提供一下思路,自動生成一個key,提交內容的時候把key帶過去,如果二者相同,就重置key或者清掉,如果不同,就是重複提交了
csrf
form表單post過去一個隱藏域的隨機字串放到session裡程式那邊接收到這個隨機字串去和session裡的字串對比如果相同則提交不相同則提示錯誤對比的時候要重置一下這個session就可以了
1.JS驗證,提交後禁用提交按鈕2.服務端驗證,每次刷新頁面,頁面中都會產生token,提交資料到服務端時判斷token是否有效,然後處理資料並銷毀token,如果前端重複提交肯定處理不了,因為token被銷毀了
點擊之後立即停用該按鈕,如果提交失敗,再恢復該按鈕,否則轉成功頁面。
或點擊之後,彈出一個遮罩。
不過,上述兩個方案都要用到 js。為什麼不想用 js 呢?
1.JS button按鈕防止重複點擊
2.服務端 快取控制,方式重複寫函式庫
3.資料庫建立唯一索引(例如 貼文標題唯一,不能重複)
可以從前台和後台來做控制:
新增前台控制邏輯,當使用者點擊發文時,disable「發文」按鈕
添加後台控制邏輯,當發布請求發送過來時,查看此人是否發送標題和內容一樣的帖子,如果存在,則禁止此重複帖子的創建
可以在模板渲染的時候生成1個id,然後提交的時候將這個id一起提交,然後與後端進行比對,這樣如果傳遞過來的id不對,那麼就忽略處理。
第一,比較簡單的解決方案是使用 debounce 函數限制 DOM 回呼觸發的頻率。
第二,如果在這個年代還要考慮用戶把 js 禁用掉的情況,那前端就不要做了。
這個問題只靠前端是解決不了的。
加緩存,單機用map,分散式用redis做緩存。
用Mysql的儲存過程,把並發的壓力交給資料庫
加鎖,樂觀鎖或悲觀鎖
唯一鍵
當前頁面產生一個唯一id,提交的時候服務端判斷只處理一次,例如
laravel
的表单提交页都有个csrf_token
那就在後台自己寫一個
csrf
好了,提供一下思路,自動生成一個key,提交內容的時候把key帶過去,如果二者相同,就重置key或者清掉,如果不同,就是重複提交了form表單post過去一個隱藏域的隨機字串放到session裡
程式那邊接收到這個隨機字串去和session裡的字串對比如果相同則提交不相同則提示錯誤對比的時候要重置一下這個session就可以了
1.JS驗證,提交後禁用提交按鈕
2.服務端驗證,每次刷新頁面,頁面中都會產生token,提交資料到服務端時判斷token是否有效,然後處理資料並銷毀token,如果前端重複提交肯定處理不了,因為token被銷毀了