回答
嗯,默認情況下,當你處理表單POST時,然後用戶回來然後刷新,然後他們會看到消息表明瀏覽器正在重新提交數據。但是,如果頁面被設置爲立即過期,那麼他們甚至不需要進行刷新,並且他們會在返回時看到頁面已過期的消息。
爲了避免兩個消息有幾件事情要嘗試:
1)使用的一種形式,而不是GET。這取決於你在做什麼,但這並不總是一個好的解決方案,因爲GET請求仍然有大小限制。信息在查詢字符串中傳遞,這不是最安全的選項。
- 或 -
2)執行服務器端重定向到一個不同的頁的形式POST之後。
看起來像一個類似的問題在這裏回答:
作爲第三種選擇一個可以防止用戶在他們的瀏覽器回去的。唯一一次我覺得有必要這樣做是爲了防止他們做一些愚蠢的事情,比如支付兩次。雖然有更好的服務器端方法來處理。如果您的網站使用會話,那麼您可以通過首先禁用結帳頁面上的緩存並將其設置爲立即過期來阻止他們付費兩次。然後,您可以利用存儲在會話中的某種標誌,如果您回頭瞭解,它實際上會改變頁面的行爲。
你需要在HTTP頭設置編譯緩存控制選項: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
然而,從可用性的角度來看,這是不鼓勵的做法此事。我強烈建議你去尋找其他的選擇。
ps:正如Steve提議的那樣,通過GET重定向是正確的方式(或者用JS檢查頁面移動)。
我不確定這是否是標準做法,但我通常不通過僅爲IE發送Vary標頭來解決此問題。在Apache中,就可以把在httpd.conf以下:
BrowserMatch MSIE force-no-vary
按照RFC:
的因人而異字段值指示充分 確定請求頭字段的集合 ,而響應爲 新鮮,是否允許高速緩存爲 使用響應來回復 後續請求而不使用 重新驗證。
實際效果是,當你回到POST時,IE只是從歷史緩存中獲取頁面。根本沒有請求去服務器端。我可以在HTTPWatch中清楚地看到這一點。
我會很有興趣聽到這種方法的潛在不良副作用。
使用下列前session_start
之一:
session_cache_expire(60); // in minutes
ini_set('session.cache_limiter', 'private');
/注:
語言是PHP
包括這是什麼語言會有幫助 – mkoryak 2012-02-15 16:17:51
- 1. ASP.NET瀏覽器顯示「網頁已過期」作爲後退按鈕(回傳後)
- 2. 網頁已過期ie7無後退按鈕
- 3. 即後退按鈕上的「網頁已過期」PHP會話問題
- 4. 過期網頁上點擊瀏覽器後退按鈕
- 5. 後退按鈕不顯示在UINavigationController上
- 6. 當JSF(Richfaces)按下後退按鈕時,網頁過期提交
- 7. 後退按鈕不顯示
- 8. 後退按鈕不顯示
- 9. 顯示按下後退按鈕上的插頁式廣告?
- 10. Facebook頁面後likecount沒有顯示在網站上像按鈕
- 11. 顯示Admob插頁式導航後退按鈕時按iOS Swift
- 12. 上後退按鈕
- 13. 通過按下後退按鈕在對話框上顯示警報框
- 14. 鉻後退按鈕跳過頁
- 15. 在註銷時顯示登錄頁面(點擊後退按鈕)
- 16. 顯示後退按鈕時用戶不在主頁
- 17. jquerymobile後退按鈕沒有顯示在頁眉
- 18. 工具欄(後退按鈕不顯示)
- 19. 隱藏/顯示後退按鈕
- 20. 後退按鈕中顯示聯繫人
- 21. 顯示UINavigationController和後退按鈕
- 22. 離子:如何顯示後退按鈕
- 23. 會顯示消息和後退按鈕
- 24. jQuery Mobile的 - 後退按鈕不顯示
- 25. 如何停止瀏覽器後退按鈕顯示我已離開的頁面
- 26. 網頁已過期
- 27. 顯示按下後退按鈕上的提醒對話框
- 28. 後退按鈕在屏幕上顯示爲不同的顏色?
- 29. 後退按鈕不顯示在導航欄上。 Xamarin
- 30. 在操作欄上顯示後退按鈕
更好地將設計您的應用程序,以便後退按鈕具有明智的意義。當我'不允許'使用後退按鈕時,我覺得它很生氣。 – Peter 2009-10-16 20:18:58
彼得,我同意。有時您可能會試圖阻止用戶返回,因此有時(例如電子商務網站的結帳流程)。但是,我的答案中提出了一個更好的服務器端解決方案。 – 2009-10-16 20:36:24
@Peter,我完全同意,但我正在處理工作流程,所以後退按鈕不適用於此。 – mkoryak 2009-10-19 02:19:53