后端防止重復提交 “利用Token解決重復提交”背后的前提是什么?
“利用Token解決重復提交”背后的前提是什么?Struts本身有一套完善的令牌機制,可以防止表單被重復提交,但是作者目前的項目自寫框架沒有使用Struts,因此它還必須編寫令牌機制,防止用戶因為返回
“利用Token解決重復提交”背后的前提是什么?
Struts本身有一套完善的令牌機制,可以防止表單被重復提交,但是作者目前的項目自寫框架沒有使用Struts,因此它還必須編寫令牌機制,防止用戶因為返回或刷新而重復提交表單內(nèi)容。這并不難,很容易實現(xiàn)。
實施原則:一致性。當JSP生成表單時,它會在表單中插入一個隱藏字段,即保存在頁面一側(cè)的標記字符串,并將該字符串存儲到會話中。當用戶提交表單時,將提交隱藏的令牌字符串。在服務(wù)器端,檢查會話是否包含與令牌字符串相等的字符串。如果有,則表示該表單是第一次提交,然后刪除會話端存儲的令牌字符串,然后進行正常的業(yè)務(wù)邏輯處理;如果沒有,則表示該表單是重復提交的,進行異常的流程處理,以及警告提示,否則什么也做不了。百度最常用的方法是使用代幣。即:
1。生成頁時生成一個令牌(隨機字符串),并同時將其寫入窗體和服務(wù)器會話的隱藏部分。
2. 當客戶端向服務(wù)器提交表單時,它會比較表單中的令牌是否與會話中的令牌一致。否則,請求將被視為無效。
3. 無論第二步的驗證是否通過,只要使用一次,令牌就會作廢(即從會話中銷毀)。同時,令牌還可以關(guān)聯(lián)時間信息,超時后自動失效。這樣,即使客戶端重復提交,也只有第一個請求才能成功。