同一個表單中的內容多次提交到伺服器中。 第一種情況: 提交完表單以後,不做其他操作,直接刷新頁面,表單會提交多次。 - 這種情況產生的根本原因是,Servlet處理完請求以後,直接轉發到目標頁面。 - 這樣整一個業務,只發送了一次請求,那麼當你在瀏覽器中點擊刷新按鈕或者狂按f5會一直都會刷新之前的請 ...
同一個表單中的內容多次提交到伺服器中。
第一種情況:
提交完表單以後,不做其他操作,直接刷新頁面,表單會提交多次。
- 這種情況產生的根本原因是,Servlet處理完請求以後,直接轉發到目標頁面。
- 這樣整一個業務,只發送了一次請求,那麼當你在瀏覽器中點擊刷新按鈕或者狂按f5會一直都會刷新之前的請求
解決方案:
使用重定向跳轉到目標頁面
第二種情況:
在提交表單時,如果網速較差,可能會導致點擊提交按鈕多次,這種情況也會導致表單重覆提交。
- 產生的原因:是因為咱們的提交按鈕可以點擊多次。
解決方案:
使提交按鈕只能點擊一次。這得通過js來完成。
window.onload = function(){
//獲取按鈕的對象
var btn = document.getElementById("sub_btn");
//為按鈕綁定單擊響應函數
btn.onclick = function(){
//點擊以後使按鈕不可用
this.disabled=true;
//當將提交按鈕設置為不可用時,會自動取消它的預設行為
//手動提交表單
this.parentNode.submit();
};
};
第三種情況:
表單提交成功以後,直接點擊瀏覽器上回退按鈕,不刷新頁面,然後點擊提交按鈕再次提交表單。
產生的原因:
因為伺服器在處理請求時,不會檢查是否為重覆提交的請求。
解決方案:
使用一個token的機制。
token就是令牌的意思。
- 伺服器在處理請求之前先來檢查瀏覽器的token。
- token由伺服器來創建,並交給瀏覽器,瀏覽器在向伺服器發送請求時需要帶著這個token
- 伺服器處理請求前檢查token是否正確,如果正確,則正常處理,否則返回一個錯誤頁面
- 伺服器所創建的token只能使用一次。
- token一般使用一個唯一的標識。
表單重覆提交的危害:
- 向資料庫中插入大量的重覆且沒有意義的數據,占用伺服器的資源。
- 處理請求伺服器並沒有檢查請求是否為重覆的請求,導致惡意的攻擊。