2010-01-27 79 views
18

我的問題是後退按鈕使瀏覽器說類似「網頁過期」的時候,前面的頁面是由形式創建的。

例子:

  • 第1頁:與聯繫接收用戶$ _ POST請求,並 顯示結果(表:表格搜索 規定 - ($ _ POST請求的形式 點到第2頁)
  • 第2頁提交, 分3頁)
  • 第3頁:顯示用戶配置文件

現在,當v isitor點擊瀏覽器中的後退按鈕,它會顯示「Page expired」之類的內容。

而不是以前的頁面應該沒有警告(第2頁,與用戶列表)

如何是你的策略來解決這個問題顯示?

+2

哇!我只是學習一些新的東西:'not'標籤操作符。 xD – 2010-01-27 11:31:57

回答

23

如果您要提交與搜索參數,你想得到一些數據,而不是修改一些。

所以,你應該使用HTTP GET方法,而不是POST:POST應該當你打算創建/修改數據,和GET時,應使用你打算獲取一些數據使用。


或者,如果你有一些創建/修改必須完成操作:

  • 形式的第一POST到第一頁
    • 該網頁確實有些操作(喜歡寫作事到數據庫)
    • ,然後重定向到另一個頁面,使用Location HTTP標頭。
  • 這就是最後一頁,即瀏覽器使用GET請求進行的查詢,它顯示從URL中收到的參數中獲取的數據。

查看wikipedia上關於此頁面的Post/Redirect/Get頁面。

+0

另外,如果您使用GET,結果頁面可加書籤 – 2010-01-27 11:36:27

+1

優秀的答案。不可能更清楚並且重要。同時給予更多的要求;備選方案和更多見解。謝謝。 – Cudos 2010-01-27 11:46:52

+0

@Cudos:​​不客氣:-)玩得開心! – 2010-01-27 12:11:24

1

送在你發佈到腳本Location頭,指着隨附後的頁面。

+0

對此使用HTTP狀態碼303。根據當前文檔,如果未明確指定,則PHP默認爲302。 – MattBianco 2014-06-05 13:49:59

1

請勿使用POST進行搜索。搜索可以安全地使用GET完成,因爲它不會改變任何內容。

1

這適用於PHP和IE8。

不僅必須設置cacheing私人,但你必須刪除4 cacheing頭,這隻能與PHP 5.3來完成。在PHP 5中。2如果使用Zend Framework的setHeader()方法,只能將4個標頭設置爲空值。出於某種原因,在IE8上將4個標頭值設置爲空值是不夠的。這裏是PHP 5.3的代碼:

header_remove("Expires"); 
    header_remove("Cache-Control"); 
    header_remove("Pragma"); 
    header_remove("Last-Modified"); 
0

你可以使用session來做到這一點。

例如。

$ _SESSION ['name'] = $ _POST ['name'];

記住在過程完成後取消設置變量以優化內存使用情況。