2010-05-26 45 views
3

我在我的網站上有一個搜索框,用戶輸入一個術語並顯示結果。當他們點擊其中一個結果(產品)時,他們會進入產品頁面。當他們點擊後退按鈕時,會顯示「警告:此頁面已過期」消息。頁面過期 - PHP/CakePHP和Internet Explorer

我在Apache上使用CakePHP,並建議我需要更改session.cache_control?我試圖在htaccess中將它轉換爲私有,但似乎沒有幫助。

任何幫助非常讚賞。

乾杯, d

回答

2

這是無關的CakePHP也不會話。的確,這個問題出現在所有的網絡編程語言中。

解決方案是讓搜索結果頁面可緩存 - 我想象你不會每5分鐘更新一次目錄?

要使其可緩存,您需要確保搜索條件使用GET而不是POST發送,然後設置正確的標題以使瀏覽器能夠緩存頁面,例如,

header('Cache-Control: max-age=360'); // allows browser to keep for 1 hour 

....如果你使用的可能收縮,某些產品的可視性在搜索會話:

header('Varies: Cookie'); 

C.

+0

第二次提到使用GET參數。記住準則:使用GET檢索數據(idempotent),使用POST來更改數據。我一直都在打破它,但這是一條很好的規則。 – 2010-05-26 15:19:39

+0

謝謝你們,是的,我已經改變它使用GET,現在一切正常。 乾杯 – iamdash 2010-05-27 09:09:30

0

您還可以使用Post/Redirect/Get design pattern模式爲了避免這一點。例如:

function index($searchTerms = null) { 
    if (isset($this->data['Model']['search_terms'])) { 
     $this->redirect(array($this->data['Model']['search_terms'])); 
    } 
    // your normal code here. 
} 

這將導致像/controller/action/search+terms代替/controller/action?search_terms=search+terms網址,和搜索術語將被傳遞給動作作爲一個參數(即$searchTerms在這種情況下)。