2016/09/15 防止用戶將表單重複提交

2016/09/15  防止用戶將表單重複提交

1.提交後,將按鈕職位不能點擊狀態

js提交後,將<input type="submit" value="submit" />,的type屬性改爲 'button',技能保持按鈕樣式,又能使按鈕處於不可點擊狀態,或者增加屬性,disabled="disabled" 。

2.flag標識方法

頁面初始化時,設置submitflag一布爾變量,初始值爲false,表單提交時判斷submitflag,如果是false,表單提交,將值設爲true,如果爲true,表單停止提交。

3.在session中存放一個特殊標誌。

當表單頁面被請求時,生成一個特殊的字符標誌串,存在session中,同時放在表單的隱藏域裏。接受處理表單數據時,檢查標識字串是否存在,並立即從session中刪除它,然後正常處理數據。
  如果發現表單提交裏沒有有效的標誌串,這說明表單已經被提交過了,忽略這次提交。
  這使你的web應用有了更高級的XSRF保護。

4.Post/Redirect/Get模式。

在提交後執行頁面重定向,這就是所謂的Post-Redirect-Get (PRG)模式。簡言之,當用戶提交了表單後,你去執行一個客戶端的重定向,轉到提交成功信息頁面。
  這能避免用戶按F5導致的重複提交,而其也不會出現瀏覽器表單重複提交的警告,也能消除按瀏覽器前進和後退按導致的同樣問題。

prg介紹

用戶在瀏覽器中的A頁面完成輸入,點擊了提交按鈕進入到了B頁面,提示”提交成功”。若分別在B頁面出現下列二種情況:
用戶刷新或者重新加載B頁面;
用戶點擊瀏覽器的後退按鈕後繼續店家前進按鈕;
三種情況都會造成表單重複提交問題。解決問題的一種思路就是將用戶點擊提交按鈕從而發出POST請求, 頁面提交跳轉和顯示結果頁面這三個行爲分離開。Client用POST方法請求Server響應數據變更,Server用Redirect方法將response指定到另一個URL上的結果頁面,Client所有對頁面顯示的請求都用GET方法告知Server。這樣,”後退再前進”或刷新頁面的行爲都發出的是GET請求, 從而不會對server產生任何數據更改的影響。
PRG模式通過響應頁面Header返回HTTP狀態碼進行頁面跳轉替代響應頁面跳轉過程。HTTP 1.1 規範介紹HTTP 303U狀態頁進行跳轉,303狀態能確保會員在瀏覽器端安全地刷新服務器端響應,而不會引起HTTP POST請求重複提交。目前很多網站依然使用HTTP 302來響應跳轉,主要考慮到一些版本的瀏覽器不能很好地兼容HTTP1.1規範中的303狀態碼。

1.提交後,將按鈕職位不能點擊狀態

js提交後,將<input type="submit" value="submit" />,的type屬性改爲 'button',技能保持按鈕樣式,又能使按鈕處於不可點擊狀態,或者增加屬性,disabled="disabled" 。

2.flag標識方法

頁面初始化時,設置submitflag一布爾變量,初始值爲false,表單提交時判斷submitflag,如果是false,表單提交,將值設爲true,如果爲true,表單停止提交。

3.在session中存放一個特殊標誌。

當表單頁面被請求時,生成一個特殊的字符標誌串,存在session中,同時放在表單的隱藏域裏。接受處理表單數據時,檢查標識字串是否存在,並立即從session中刪除它,然後正常處理數據。
  如果發現表單提交裏沒有有效的標誌串,這說明表單已經被提交過了,忽略這次提交。
  這使你的web應用有了更高級的XSRF保護。

4.Post/Redirect/Get模式。

在提交後執行頁面重定向,這就是所謂的Post-Redirect-Get (PRG)模式。簡言之,當用戶提交了表單後,你去執行一個客戶端的重定向,轉到提交成功信息頁面。
  這能避免用戶按F5導致的重複提交,而其也不會出現瀏覽器表單重複提交的警告,也能消除按瀏覽器前進和後退按導致的同樣問題。

prg介紹

用戶在瀏覽器中的A頁面完成輸入,點擊了提交按鈕進入到了B頁面,提示”提交成功”。若分別在B頁面出現下列二種情況:
用戶刷新或者重新加載B頁面;
用戶點擊瀏覽器的後退按鈕後繼續店家前進按鈕;
三種情況都會造成表單重複提交問題。解決問題的一種思路就是將用戶點擊提交按鈕從而發出POST請求, 頁面提交跳轉和顯示結果頁面這三個行爲分離開。Client用POST方法請求Server響應數據變更,Server用Redirect方法將response指定到另一個URL上的結果頁面,Client所有對頁面顯示的請求都用GET方法告知Server。這樣,”後退再前進”或刷新頁面的行爲都發出的是GET請求, 從而不會對server產生任何數據更改的影響。
PRG模式通過響應頁面Header返回HTTP狀態碼進行頁面跳轉替代響應頁面跳轉過程。HTTP 1.1 規範介紹HTTP 303U狀態頁進行跳轉,303狀態能確保會員在瀏覽器端安全地刷新服務器端響應,而不會引起HTTP POST請求重複提交。目前很多網站依然使用HTTP 302來響應跳轉,主要考慮到一些版本的瀏覽器不能很好地兼容HTTP1.1規範中的303狀態碼。
發佈了31 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章