我有一個表單。成功提交後,會有一個服務器端重定向來查看新條目。單擊後退按鈕後防止重新填充表單域
問題:所有的投入仍與過去的值填充按下後退按鈕後(它不會自動重新提交表單或顯示「確認提交表單」的提示)。這允許用戶再次手動單擊「提交」並非常容易地提交重複條目,這是我想要避免的。請注意,這不是經典的「轉貼」問題,我們使用的是後/重定向/獲取模式。
表單中有20多個字段,從技術上講它是可能兩個相同的條目可能是合法的,但我只希望在用戶按下後退按鈕時清除這些字段。
這是我已經試過:
無緩存頭無緩存的header('Cache-Control: must-revalidate, no-store, no-cache, private, max-age=0');
header('Pragma: no-cache');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
組合meta標籤
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
提交使用JavaScript重定向
$('form').submit(function(){
$.post($(this).attr('action'), $(this).serialize(), function(response){
window.location = response.redirectUrl;
});
});
「刷新」提交表單
header('refresh:0; url=view_entry');
刷新由會話數據觸發後重定向(開始有點哈克在這裏...)
// psuedo PHP code for the "add" page
if ($_SESSION['submit']) {
$_SESSION['submit'] = 0;
redirect(current_url); // Cross fingers and hope this clears the form
}
if ($formValid and $saveEntry) {
$_SESSION['submit'] = 1;
redirect(next_url);
}
無的這個作品中,字段仍然填充後擊中後退按鈕。最後一個選項實際上觸發了「確認表單提交」提示,這不是我想要的,但至少它會好一點。
我要指出,這是谷歌瀏覽器。 Codeigniter和jQuery可用,如果有幫助。我只是希望在用戶點擊後退按鈕後清除表單域,並在發佈成功的條目之後清除。我實際上並沒有回憶過這個問題,我完全沒有想法。什麼是正確的方法來做到這一點?
FWIW我已經嘗試啓用Codeigniter的CSRF保護,但隨機數得到重新生成在後退按鈕,所以它沒有幫助... –
如何在谷歌瀏覽器重新生成一個CSRF令牌但不清除表單值?! – stormdrain
或者*爲什麼瀏覽器在發佈/重定向後保持字段值? –