PHP中文网2017-04-18 10:07:45
點擊之後立即停用該按鈕,如果提交失敗,再恢復該按鈕,否則轉成功頁面。
或點擊之後,彈出一個遮罩。
不過,上述兩個方案都要用到 js。為什麼不想用 js 呢?
阿神2017-04-18 10:07:45
可以從前台和後台來做控制:
新增前台控制邏輯,當使用者點擊發文時,disable「發文」按鈕
添加後台控制邏輯,當發布請求發送過來時,查看此人是否發送標題和內容一樣的帖子,如果存在,則禁止此重複帖子的創建
PHPz2017-04-18 10:07:45
第一,比較簡單的解決方案是使用 debounce 函數限制 DOM 回呼觸發的頻率。
第二,如果在這個年代還要考慮用戶把 js 禁用掉的情況,那前端就不要做了。
PHP中文网2017-04-18 10:07:45
這個問題只靠前端是解決不了的。
加緩存,單機用map,分散式用redis做緩存。
用Mysql的儲存過程,把並發的壓力交給資料庫
加鎖,樂觀鎖或悲觀鎖
唯一鍵
怪我咯2017-04-18 10:07:45
那就在後台自己寫一個csrf
好了,提供一下思路,自動生成一個key,提交內容的時候把key帶過去,如果二者相同,就重置key或者清掉,如果不同,就是重複提交了
迷茫2017-04-18 10:07:45
form表單post過去一個隱藏域的隨機字串放到session裡
程式那邊接收到這個隨機字串去和session裡的字串對比如果相同則提交不相同則提示錯誤對比的時候要重置一下這個session就可以了
PHP中文网2017-04-18 10:07:45
1.JS驗證,提交後禁用提交按鈕
2.服務端驗證,每次刷新頁面,頁面中都會產生token,提交資料到服務端時判斷token是否有效,然後處理資料並銷毀token,如果前端重複提交肯定處理不了,因為token被銷毀了