如何防止重複提交

2021-05-27 05:57:26 字數 1018 閱讀 5075

防止表單重複提交的兩種方式

1) 通過重定向

2) 通過session token(session令牌):當客戶端請求頁面時,伺服器會通過token標籤生成乙個隨機數,並且將該隨機數放置到session當中,然後將該隨機數發向客戶端;如果客戶第一次提交,那麼會將該隨機數發往伺服器端,伺服器會接收到該隨機數並且與session中所儲存的隨機數進行比較,這時兩者的值是相同的,伺服器認為是第一次提交,並且將更新伺服器端的這個隨機數值;如果此時再次重複提交,那麼客戶端發向伺服器端的隨機數還是之前的那個,而伺服器端的隨機數則已經發生了變化,兩者不同,伺服器就認為這是重複提交,進而轉向invalid.token所指向的結果頁面。

當用session token的時候是要配置的,且此時必須要用struts的標籤庫,這是他的標籤庫的乙個增強的功能.必須在表單中加上標籤,此標籤會產生兩個隱藏域,

表單**如下:

username:

password:

產生的隱藏域如下:

在struts.xml中配置的invalid.token是struts提供的.

/tokensuccess.jsp

invalid.token">/tokenfail.jsp

檢視<s:token>標籤的處理類:叫tokentag,一直跟到token類裡面有個tokenname = tokenhelper.default_token_name;再跟到tokenhelper類裡面去,tokenhelper這個類就是主要的乙個處理那個標籤的類.他產生乙個隨機數,並把這個隨機數儲存在session裡面,再傳送乙份給客戶端.

string token = generateguid();就是這個方法產生的隨機數,guid是全域性唯一識別符號.

public static string settoken(string tokenname)

catch(illegalstateexception e)

return token;

}這個原理要弄清楚.理解這點就要想清楚操作到底有沒有跟伺服器端打交道.如後退操作是不會跟服務端打交道的.

Spring Boot 如何防止重複提交?

在傳統的web專案中,防止重複提交,通常做法是 後端生成乙個唯一的提交令牌 uuid 並儲存在服務端。頁面提交請求攜帶這個提交令牌,後端驗證並在第一次驗證後刪除該令牌,保證提交請求的唯一性。上述的思路其實沒有問題的,但是需要前後端都稍加改動,如果在業務開發完在加這個的話,改動量未免有些大了,本節的實...

如何防止頁面重複提交

由於重複點選或者網路重發,或者nginx重發等情況會導致資料被重複提交 解決辦法 集群環境 採用token加redis redis單執行緒的,處理需要排隊 單jvm環境 採用token加redis或token加jvm記憶體 處理流程 1.資料提交前要向服務的申請token,token放到redis或...

如何防止頁面重複提交

思路 重複提交有兩方面的含義,一是操作方面的重複提交,旨在說明乙個客戶端,一次只能傳送乙個請求到服務端,如果發出後未收到服務端響應,再次提交,則視為無效提交 重複了 二是業務方面,同乙個表單,服務端處理了兩次,兩次都是合法的操作 不違反第一種含義 但是表單可能被處理了兩次,如像乙個賬號轉賬了兩次,金...