2012-11-30 69 views
1

當提交表單,然後用戶單擊後退按鈕時,如何防止數據被重新提交。我讀過的很多內容表明解決方案是實施PRG「模式」。在java servlet中阻止後退按鈕重新提交表單數據

我發現這個網頁PRG Pattern,我想用作一個例子。

當我執行此代碼時,我仍然可以單擊後退按鈕,然後重新單擊提交按鈕並讓表單重新提交數據,即使它重定向。所以,我沒有看到如何防止重新提交表單數據。

因此,以此頁面爲例,如何修改代碼以防止此行爲?

回答

1

PRG是用來防止重裝重新提交事件,你可以隨時返回到頁面的瀏覽器,並與該

提交表單,以防止這一點,你可以發出在渲染的形式標記,並同時提交其發送到服務器看看是否是正確的令牌(通過將其放在某處會話),然後處理請求

更新:當你所服務的形式設置一些象徵性的會議

request.getSession().setAttribute("formToken", someCode); 

現在提交的形式,發佈令牌回到s erver,並將其與來自會話的匹配,如果兩個匹配都允許該請求,如果不匹配,則意味着該請求已經被執行或者某個人試圖模擬表單發佈並且丟失提交的數據中的表單令牌,

所以現在,如果你已經提交了一次,如果你回到使用瀏覽器的按鈕,並重新提交它的代碼將不匹配,它會阻止重新提交

做同步處理並行請求的情況下

令牌檢查的事
+0

「把它放在會話中的某個地方」如果你可以用我鏈接的頁面上的代碼作爲例子來描述如何做到這一點,那將是非常有幫助的。你不一定要抓住那個代碼並運行它,只是描述這個過程...... :) – NobodyReally

+0

更新的答案與詳細信息 –

+0

我想我有點密集。但是,如果我在doGet(提供表單)中使用上面的代碼片段,然後在doPost中匹配它們,它們將始終匹配,因爲當我單擊後退按鈕時,doGet會被執行以設置屬性... – NobodyReally

相關問題