1. 程式人生 > >表單防止頁面重複提交方法

表單防止頁面重複提交方法

使用者在操作表單資料時往往會出現表單資料重複提交的問題,尤其實在Web開發中此類問題比較常見。重新整理頁面,後退操作以前的頁面,單機多次按鈕都會導致資料重複提交。此類問題是因為瀏覽器重複提交HTTP請求導致。

   下面簡單介紹以防止表單資料重複提交的四種解決方案。

一、在資料庫新增唯一欄位

    在資料庫建表的時候在ID欄位新增主鍵約束,賬號,名稱的資訊新增唯一性約束。確保資料庫只可以新增一條資料。
   此方法最有效的防止了資料重複提交。

二、用js為新增禁用

  當用戶提交表單之後,可以使用js將提交按鈕隱藏(disable屬性),或者增加js變數,防止使用者多次點選按鈕提交資料。
    注意:如果客戶端禁止使用js,則此方法無效。

三、使用Post/Redirect/Get

  Post/Redirect/Get簡稱PRG,是一種可以防止表單資料重複提交的一種Web設計模式,像使用者重新整理提交響應頁面等比較典型的重複提交表單資料的問題可以使用PRG模式來避免。例如:當用戶提交成功之後,執行客戶端重定向,跳轉到提交成功頁面。

   注意:PRG設計模式並不適用所有的重複提交情況,比如:

       1)由於伺服器響應緩慢,使用者重新整理提交POST請求造成的重複提交。
       2)使用者點選後退按鈕,返回到資料提交介面,導致的資料重複提交。
       3)使用者多次點選提交按鈕,導致的資料重複提交。
       4)使用者惡意避開客戶端預防多次提交手段,進行重複資料提交。

四、使用session設定令牌

  產生頁面時,伺服器為每次產生的Form分配唯一的隨機標識號,並且在form的一個隱藏欄位中設定這個標識號,同時在當前使用者的Session中儲存這個標識號。當提交表單時,伺服器比較hidden和session中的標識號是否相同,相同則繼續,處理完後清空Session,否則伺服器忽略請求。
   注意:惡意使用者可利用這一性質,不斷重複訪問頁面,以致Session中儲存的標識號不斷增多,最終嚴重消耗伺服器記憶體。可以採用在Session中記錄使用者發帖的時間,然後通過一個時間間隔來限制使用者連續發帖的數量來解決這一問題。