2010-01-01 55 views
2

我的PHP項目中有六個註冊表單。錯誤 - 網頁已在PHP中過期?

在任何頁面之間如果我按後退按鈕在瀏覽器欄出現錯誤:

Webpage has Expired

我使用$_POST提交數據。我不明白爲什麼會發生這種情況?

回答

3

該消息與IE處理從POST數據生成的頁面的方式有關。

一般來說,爲避免此問題,您必須確保在後退歷史記錄中,用戶永遠無法登陸POST請求生成的頁面。建議使用jspcal,您的POST響應應該是重定向到GET請求的另一個頁面。這也被認爲是最佳實踐,因爲它降低了兩次提交表單的風險。

0

您是否試過「$ _GET」?這可能是因爲POST信息來自頁面之前,並沒有真正保存在任何地方的時間超過頁面的轉換,而GET使用URL來發送信息,因此信息存儲在某處。我會看到GET會發生什麼。

+0

一般而言,您不應提交GET請求,當您提交的表單會留下副作用,例如在數據庫中插入數據或更新瀏覽器Cookie。另外,IE中的GET變量在其內容總長度上受到限制。 – 2010-01-01 03:10:25

+0

@丹尼爾 - 謝謝。我不知道這一點。在查詢數據庫向用戶顯示內容時使用$ _GEt安全嗎? (只讀,就像各種目錄一樣) – Moshe 2010-01-01 04:11:53

+0

是的,最好的做法是對顯示數據而不改變它的請求使用GET,對於可能更新或銷燬數據的請求使用POST。 (HTTP DELETE和PUT也可用於更改數據,但它並不常見)。 – JAL 2010-01-01 04:28:55

2

當您嘗試通過瀏覽器歷史記錄重新提交發布數據時,在某些瀏覽器(您可能正在使用Internet Explorer)時,總會發生這種情況。儘管許多瀏覽器(例如Firefox)讓您有機會在歷史中重新提交發布數據。

3

接收柱後重定向頁面:

$name = $_POST['name']; 
... 
header('Location: next.php'); 
+3

這就是所謂的PRG模式: http://en.wikipedia.org/wiki/Post/Redirect/Get – 2010-01-06 00:48:00

0

真正的答案是:「如果你點擊後退按鈕,瀏覽器不發送POST請求你,當你第一次訪問該頁面最初發送」 ,如果您正在執行多步驟表單,則可能需要執行的操作是使用AJAX,或使用GET而不是POST。