python - 如何防止狂点提交表单按钮导致的数据重复?
高洛峰
高洛峰 2017-04-18 10:05:45
0
12
1658
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(12)
洪涛

點擊之後立即停用該按鈕,如果提交失敗,再恢復該按鈕,否則轉成功頁面。

或點擊之後,彈出一個遮罩。

不過,上述兩個方案都要用到 js。為什麼不想用 js 呢?

迷茫

1.JS button按鈕防止重複點擊

2.服務端 快取控制,方式重複寫函式庫

3.資料庫建立唯一索引(例如 貼文標題唯一,不能重複)

阿神

可以從前台和後台來做控制:

  • 新增前台控制邏輯,當使用者點擊發文時,disable「發文」按鈕

  • 添加後台控制邏輯,當發布請求發送過來時,查看此人是否發送標題和內容一樣的帖子,如果存在,則禁止此重複帖子的創建

迷茫

可以在模板渲染的時候生成1個id,然後提交的時候將這個id一起提交,然後與後端進行比對,這樣如果傳遞過來的id不對,那麼就忽略處理。

PHPzhong

第一,比較簡單的解決方案是使用 debounce 函數限制 DOM 回呼觸發的頻率。

第二,如果在這個年代還要考慮用戶把 js 禁用掉的情況,那前端就不要做了。

洪涛

這個問題只靠前端是解決不了的。

  1. 加緩存,單機用map,分散式用redis做緩存。

  2. 用Mysql的儲存過程,把並發的壓力交給資料庫

  3. 加鎖,樂觀鎖或悲觀鎖

  4. 唯一鍵

刘奇

當前頁面產生一個唯一id,提交的時候服務端判斷只處理一次,例如laravel的表单提交页都有个csrf_token

刘奇

那就在後台自己寫一個csrf好了,提供一下思路,自動生成一個key,提交內容的時候把key帶過去,如果二者相同,就重置key或者清掉,如果不同,就是重複提交了

迷茫

form表單post過去一個隱藏域的隨機字串放到session裡
程式那邊接收到這個隨機字串去和session裡的字串對比如果相同則提交不相同則提示錯誤對比的時候要重置一下這個session就可以了

Ty80

1.JS驗證,提交後禁用提交按鈕
2.服務端驗證,每次刷新頁面,頁面中都會產生token,提交資料到服務端時判斷token是否有效,然後處理資料並銷毀token,如果前端重複提交肯定處理不了,因為token被銷毀了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板