搜尋

首頁  >  問答  >  主體

python - 如何防止狂点提交表单按钮导致的数据重复?

高洛峰高洛峰2807 天前1682

全部回覆(12)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

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

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

    回覆
    0
  • 阿神

    阿神2017-04-18 10:07:45

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

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:07:45

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

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

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

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

    4. 唯一鍵

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:07:45

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

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:07:45

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

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

    回覆
    0
  • 取消回覆