2016-02-16 27 views
2

場景:經典ASP緩存無效(但仍滿足Speed得分)

我與IIS和ASP的工作,我們需要緩存的網站(做Google Page Speed,我的老闆,快樂)。我們目前有IIS緩存一切(asp/JS/CSS)爲期1周。

問題:

更新的ASP頁面的HTML內容後,我的老闆看到舊版本的頁面,直到他做了(力)刷新。

問:

我怎麼能(力)更新服務器緩存我做出改變的ASP HTML內容之後?

我希望我的同事和管理人員能夠查看最新更改,而不必強制瀏覽器刷新。

回答

0

一個有用的入門讓我們看看,如果我們可以讓老闆高興。和你一樣,我有一些人認爲F5或Ctrl + F5很煩人。

快速回顧,請確保您的IIS服務器上的輸出緩存更新已更改讓我們將其設置爲「緩存直到更改」。 我讀過,你每週清除它,但如果事情沒有改變......爲什麼? enter image description here

讓我們設置客戶端瀏覽器緩存默認值。 而且,對於您使用GMT時間30分鐘後頁面過期的所有頁面標題,您都可以看到以下內容。 主標題:

Dim dtmExp 
Response.Buffer = True 
Response.CharSet = "UTF-8" 
dtmExp = DateAdd("n", 30, Now()) 
Response.ExpiresAbsolute = dtmExp 
Response.Expires = dtmExp 

我們有多種選擇和方法,以觸發我們的頭改變。 你可以在這個例子中使用會話,餅乾,數據庫更新等,我使用Sessions可以更好地改變事物以適應你的應用。

PageEdit.asp

Session("EditedPageFullURL") = "/yourpage.asp" 

在一個共同的功能頁面中添加以下內容。

Function EditorsReload(eChk,erURL) 
If IsNumeric(eChk) Then 
    Session("Editing") = eChk 
End If 
If Len(erURL) = 0 Then 
    Exit Function 
End If 
If Session("Editing") <> "" Then 
    If Session("Editing") = 1 Then 
     If (LCase(erURL) = LCase(Request.ServerVariables("SCRIPT_NAME"))) Then 
      Session("Editing") = "" 
      Session("EditedPageFullURL") = "" 
      Response.Expires = -1 
      Response.ExpiresAbsolute = Now() -1 
      Response.AddHeader "pragma", "no-store" 
      Response.AddHeader "cache-control","no-store, no-cache, must-revalidate" 
     End If 
    End If 
End If 
End Function 

將以下內容放置在您的頁面中,您可能會看到任何標題。

Call EditorsReload(1,Session("EditedPageFullURL")) 

如果您的網站有登錄和成員會話設置,您可以將它包裝在「Session(」AUTH「)」中。 除此之外,僅當會話(「EditedPageFullRUL」的長度大於1時纔會觸發。

這將更新老闆瀏覽器頭,迫使瀏覽器刷新本地緩存。 這是一次性交易,因此任何額外的頁面刷新都使用標準標題。

這樣做有很多方法,所以要有創意!