思路:
重複提交有兩方面的含義,
一是操作方面的重複提交,旨在說明乙個客戶端,一次只能傳送乙個請求到服務端,如果發出後未收到服務端響應,再次提交,則視為無效提交(重複了)。
二是業務方面,同乙個表單,服務端處理了兩次,兩次都是合法的操作(不違反第一種含義),但是表單可能被處理了兩次,如像乙個賬號轉賬了兩次,金額資訊一致,可能後台的交易流水不一致,但是確實產生了兩筆交易。
在web專案中,防止重複提交,需要解決以上兩種問題,
第一種的解決思路是通過token的思路。
第二種通過業務判斷解決
以下部分**,首先服務端
表單提交前,或者表單載入時,服務端返回客戶端token
session["last_token
"] = token;
服務端接收客戶端發來的token,同時產生並、註冊、返回新的token 以便下次請求使用
string token =guid.newguid().tostring();if (session["
last_token
"] == null || session["
last_token
"].tostring() !=submittoken));}
session[
"last_token
"] = token;
以上方式,可解決問題一
下面的方式,解決問題二
result verfiyresult = this.filterduplicateordersubmit(bill, verificationcode);
if (!verfiyresult.success)
);}
服務端檢測到重複 ,返回520錯誤碼,同時包含驗證碼,要求客戶端下次請求附加此驗證碼,才能通過驗證
private result filterduplicateordersubmit(billnew bill, stringverificationcode)
var lastorderinfo = bill.consignee + bill.consigneephone + bill.shipper + bill.shipperphone ;if (session["
last_order_info
"] != null && session["
last_order_info
"].tostring() ==lastorderinfo)
else
else}}
session[
"last_order_info
"] =lastorderinfo;
return
new result("
無重複!
", true
); }
如何防止頁面重複提交
由於重複點選或者網路重發,或者nginx重發等情況會導致資料被重複提交 解決辦法 集群環境 採用token加redis redis單執行緒的,處理需要排隊 單jvm環境 採用token加redis或token加jvm記憶體 處理流程 1.資料提交前要向服務的申請token,token放到redis或...
如何防止重複提交
防止表單重複提交的兩種方式 1 通過重定向 2 通過session token session令牌 當客戶端請求頁面時,伺服器會通過token標籤生成乙個隨機數,並且將該隨機數放置到session當中,然後將該隨機數發向客戶端 如果客戶第一次提交,那麼會將該隨機數發往伺服器端,伺服器會接收到該隨機數...
php 防止頁面重新整理重複提交
一.使用session防止重複提交 其實跟驗證碼一樣的原理,主要是生成session和input隱藏域,這邊我的 是在乙個頁面中處理。header content type text html charset utf 8 頁面編碼 session start 開啟session if isset p...