2011-06-06 135 views
4

我正在爲大學開發JSP Web應用程序,並且在用戶頁面中顯示了人員圖片。從JSP或Javascript中的瀏覽器緩存中清除圖像

一旦用戶註銷,我如何從網絡瀏覽器緩存中清除此圖片?

使用JSP或JavaScript

+0

+1我今天聽說過最奇怪的要求。 :) – 2011-06-06 22:05:25

回答

6

這是不可能的。你最好的選擇就是完全停用正在討論的資源的緩存。創建一個filter,它在doFilter()方法中執行以下任務。

HttpServletResponse hsr = (HttpServletResponse) response; 
hsr.setHeader("Cache-Control", "no-cache,no-store,must-revalidate"); 
hsr.setHeader("Pragma", "no-cache"); 
hsr.setDateHeader("Expires", 0); 
chain.doFilter(request, response); 

並將其映射到覆蓋感興趣圖像的URL模式。


編輯:如果你實際上不在乎形象存在於瀏覽器的緩存,但你的具體問題是,不同的登錄用戶的基本使用相同的圖像的URL,因爲它已經由一些servlet動態地提供服務,那麼你也可以通過給每個獨特的用戶一個獨特的圖像URL來解決它。您可以通過將用戶標識作爲請求參數附加到圖像URL或將其包含在圖像路徑中來完成此操作。

<img src="profileimage?id=${user.id}" /> 

<img src="profileimage/${user.id}" /> 
+0

根據你的網絡服務器,我認爲你可以在那裏設置相同類型的過濾器。 – 2011-06-06 22:13:36

1

問題顯然不客戶端和服務器端代碼之間進行區分。

首先,當用戶關閉網頁瀏覽器時,您無法清除緩存,因爲瀏覽器不見了。也就是說,您可以跟蹤圖像更改並在圖像URL中附加一個數字 - 這將強制Web瀏覽器忽略緩存並加載新圖像。

例子:

File filename = new File("/path/to/profile.png"); 
long t = filename.lastModified(); 
System.out.print("<img src='profile.png?"+t+"'/>"); 
+1

我不認爲他想跟蹤圖像的版本。他希望從瀏覽器的緩存中刪除只能在登錄後才能訪問的圖像。任何能夠訪問該物理計算機的人現在都可以直接從緩存中訪問該映像,而無需登錄該網站。 – 2011-06-06 22:10:53

+0

我沒有說他希望*跟蹤版本,我說他*必須*跟蹤圖像。做到這一點的最好方法(恕我直言)是用我上面的方法。 – Christian 2011-06-06 22:13:19