這是一個典型的HTML表單的問題,你可以解決它通過以下方法
1)服務器端(網頁過期)任何一個:既然你提到了頁面刷新並轉到確認。您可以設置no-cache並將頁面過期時間添加爲-1,以使您擁有該表單。 因此,當用戶按下後退按鈕時,他會看到該頁面已過期。他將被迫加載新鮮的頁面。這是我在大多數銀行網站上看到的行爲。
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
2)使用交鑰匙方法:加載窗體時,您可以生成會話內存隨機密鑰,並把它嵌入在頁面中的隱藏價值。 在表單提交過程中,根據會話中的值檢查提交的隱藏鍵。如果存在,則將該條目添加到數據庫中,否則您可以使用新密鑰爲用戶重新加載頁面(誰可能無意中這樣做了)。
在負載平衡或Web羣,考慮堅持以數據庫根據當前用戶交鑰匙。
3)客戶端(不推薦):您可以通過從歷史記錄中刪除頁面來限制用戶使用瀏覽器後退按鈕。 (一個副作用是,它會刪除整個歷史爲這個瀏覽器標籤/窗口)
history.pushState(null, null, document.title);
window.addEventListener('popstate', function() {
history.pushState(null, null, document.title);
});
如果你需要一個push和pop狀態不支持舊的瀏覽器同樣的支持,您可以使用下面的代碼片段。
<script>
function preventBack() {
window.history.forward();
}
setTimeout("preventBack()", 0);
window.onunload = function() {
null
};
</script>