如何防止頁面重複提交

2022-02-25 11:32:51 字數 1460 閱讀 8342

思路:

重複提交有兩方面的含義,

一是操作方面的重複提交,旨在說明乙個客戶端,一次只能傳送乙個請求到服務端,如果發出後未收到服務端響應,再次提交,則視為無效提交(重複了)。

二是業務方面,同乙個表單,服務端處理了兩次,兩次都是合法的操作(不違反第一種含義),但是表單可能被處理了兩次,如像乙個賬號轉賬了兩次,金額資訊一致,可能後台的交易流水不一致,但是確實產生了兩筆交易。

在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, string

verificationcode)

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...