2009-10-30 40 views
0

我在我的網站上使用了下面的標題,但是我遇到了一個問題。我第一次訪問我的網站時,我沒有看到我的ACP鏈接。還有一些情況是,我們的數據庫中只有註冊成員可以創建信息,但表單仍在爲未登錄用戶加載,因此信息正在使用member_id字段爲0創建。標題頁緩存

我認爲問題是緩存文件停留在代理緩存太長時間。也許我錯過了某些東西或誤解了我正在使用的緩存技術。

任何人可以提供任何建議,將不勝感激。

 if ($currentMember->isLoggedIn()) { 
    $this->cachePermission = 'private'; 
    } else { 
    $this->cachePermission = 'public'; 
    } 
    $this->tru->header->set('Pragma', array(
    $this->cachePermission 
)); 
    $this->tru->header->set('Cache-Control', array(
    $this->cachePermission, 
    'no-cache', 
    'max-age=300', 
    's-maxage=300', 
    'must-revalidate' 
));

更新

我主要是想獲得後退按鈕,在用戶的瀏覽器工作。我不希望任何其他的緩存。

回答

2

如果根據用戶是否登錄進行更改,我建議不允許該頁面被緩存。

Cache-Control: no-store, must-revalidate 
Expires: 0 

如果這太極端了,我至少會建議使用總是和Cache-Control: private絕不允許它被存儲在代理緩存。根據我的經驗,當不同的用戶看到不同的東西時,允許代理緩存它只會造成麻煩。

更新時間:

根據我的經驗,發現如果你想讓它在所有主要瀏覽器運行相同的那樣的中間地帶是很困難的。你可以嘗試從Cache-Control: private, must-revalidate開始並從那裏開始。

另一件事,可能有助於基於頁面的狀態和用戶登錄時使用ETag header,一旦頭部被添加,pecl_http提供了一些有用的功能,如http_cache_etag()發送到瀏覽器中的304 /未修改響應所以它知道要從緩存加載。

+0

頁面的標題包含一個網絡欄,其中包含您所有的登錄功能。因此,網站上的每個頁面都會維護用戶是否已登錄。我真的只想當用戶在瀏覽器中加載緩存時在瀏覽器中回退或轉發。 – Webnet 2009-10-30 12:44:05

+0

我按照你的建議調整了標題,只是私人/必須重新驗證,我會看看它是如何工作的。 – Webnet 2009-11-01 20:25:17

+0

它似乎不工作。我無法確定發生了什麼。每當我第一次訪問該頁面時,它都有我的正確用戶名,因此可以正確檢測我的登錄信息。它顯示「我的賬戶」鏈接以及註銷選項等。但作爲我網站上的作者,在顯示初始頁面後,我只能看到作者CP的鏈接。 – Webnet 2009-11-03 03:24:50

0

我見過FireFox在緩存方面變得非常積極。你可以知道,當你在你的URI中輸入一個模擬的查詢字符串時,會發生這種情況,並且你會得到新的結果。

?asdf=1 

在診斷瀏覽器的瘋狂時,我經常會用到最後的結果。