本文介紹了你總是在發(fā)帖后重定向嗎?如果是,你是如何做到的?的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
假設(shè)您正在提交一個(gè)表單,這會(huì)影響您的數(shù)據(jù)庫(添加記錄/刪除記錄/更新記錄),您的請求如下所示:
POST/APPLICATE/ACTION=更新
現(xiàn)在,假設(shè)您已完成更新,因此您希望將用戶帶到主頁。
Response.sendReDirect/app/action=home
這個(gè)效果非常好。用戶在POST后被發(fā)送一個(gè)重定向,所以即使用戶試圖通過按F5來刷新頁面,您也是好的。但是,如果您執(zhí)行以下操作,則此操作將不起作用:
requestDispatcher.forward(/application/action=home)
假設(shè)在完成更新后必須顯示不同類型的錯(cuò)誤/成功消息,您很可能在POST之后進(jìn)行轉(zhuǎn)發(fā)。在這種情況下,如何避免發(fā)生兩次更新操作?
我覺得很有趣的是,許多安全站點(diǎn)(銀行)/支付網(wǎng)關(guān)傾向于通過在屏幕上放置文本來通知用戶,例如”請不要按下后退/刷新按鈕”。
沒有更好的方法處理這件事了嗎?除了要求用戶不要按下這些按鈕之外?當(dāng)我最后一次檢查的時(shí)候,有一個(gè)叫做‘垂直響應(yīng)緩存’的東西。一個(gè)篩選器,它將標(biāo)識您的請求在會(huì)話中的唯一性,并在請求重復(fù)時(shí)嘗試發(fā)送緩存的響應(yīng)。有沒有更簡單的方法來解決這個(gè)經(jīng)典問題?
下面是我提到的垂直響應(yīng)緩存解決方案的鏈接:http://www.fingo.info/en/articles/_1.html。然而,我不確定這是否真的有效。
推薦答案
我的一個(gè)想法是在提交后的表單中嵌入一個(gè)唯一的ID(可能是一個(gè)隨機(jī)字符串)作為隱藏的表單域。ID字符串可以作為”交易ID”放入數(shù)據(jù)庫。現(xiàn)在,當(dāng)您去更新數(shù)據(jù)庫時(shí),首先檢查是否存在已提交交易ID的記錄,如果有,則假定它是重復(fù)的,不要更改數(shù)據(jù)庫。
當(dāng)然,正如我所說的,這只是一個(gè)想法。我不知道在實(shí)踐中實(shí)際使用的是什么方法。(我懷疑許多不那么重要的網(wǎng)站只是忽略了這個(gè)問題,希望他們的用戶會(huì)很聰明……這是我見過的最失敗的提議;-)
編輯:正如評論中指出的,在數(shù)據(jù)庫中存儲(chǔ)事務(wù)ID可能會(huì)占用大量空間,但如果這是一個(gè)問題,您可以在內(nèi)存中保留在過去5分鐘/1小時(shí)/1天/任何時(shí)間內(nèi)處理的所有事務(wù)ID的緩存。這應(yīng)該會(huì)奏效,除非你面對的是一個(gè)意志堅(jiān)定的黑客…
這篇關(guān)于你總是在發(fā)帖后重定向嗎?如果是,你是如何做到的?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,