2012-04-24 12 views
1

假設我的PHP頁面執行'REAL'操作。
'REAL'我的意思是,執行數據庫操作,寫入文件,類似的東西,而不僅僅是發送HTML。PHP和瀏覽器的「返回」按鈕 - 真正發生的事情

當我點擊'返回'按鈕到我的PHP頁面,假設它是一個GET。

  • 這是否意味着我的PHP代碼不一定會在所有瀏覽器上始終運行?

  • 如果我有一個圖像,我想每次刷新該頁面時都會刷新圖像(特別是在'Back'上),我應該怎麼做?

它只是我或有一個內部不喜歡的JavaScript是正常的? (它總是在我看來像一個無法在第一個地方工作的補丁,加上不是所有人都讓javascript工作)

我不挑剔,但可以認爲HTTP級解決方案是最好在這裏?

感謝

+1

這裏的關鍵詞是* idempotence *。它在HTTP/1.1 RFC2616中明確提到。 GET請求應該是冪等的,這意味着提交多個相同的請求不會導致服務器狀態的改變。如果你有一個腳本來改變服務器的狀態 - 「執行數據庫操作,編寫文件,類似的東西」,那麼你應該使用'POST'方法。然後,您發出303重定向到顯示這些操作結果的頁面。 – DaveRandom 2012-04-24 11:57:14

回答

3

的頁面通過POST加載會導致瀏覽器要求用戶重新提交的信息,查看導致該網頁再次發生執行的操作的頁面。如果通過GET請求頁面並在查詢字符串中包含變量,則會發生同樣的情況,但是會默默無聞地(無需用戶再次提示)。

最好的解決辦法是使用POST/REDIRECT/GET pattern。我在一個關於processing payments that I wrote for Authorize.Net的例子中使用了它。希望這點能讓你朝着正確的方向前進。

2

通過 '真正的' 我的意思是,在執行DB行動....

....假設它是一個GET。

然後你已經破壞了HTTP的基本原則:Get是冪等的,onlu POST,DELE和PUT應該修改服務器的狀態。

有一個很好的理由,即使您告訴瀏覽器該頁面不可緩存,瀏覽器導航元素(後退,前進)的使用也不要求瀏覽器返回GET或HEAD操作的原點

如果我有一個形象,我想刷新每次

...然後使用JavaScript通過在window.onload方法隨機生成的查詢字符串獲取圖像。

相關問題