从JSP或Javascript中的浏览器缓存中清除图像

问题描述:

我正在为大学开发JSP Web应用程序,并且在用户页面中显示了人员图片。从JSP或Javascript中的浏览器缓存中清除图像

一旦用户注销,我如何从网络浏览器缓存中清除此图片?

使用JSP或JavaScript

+0

+1我今天听说过最奇怪的要求。 :) – 2011-06-06 22:05:25

这是不可能的。你最好的选择就是完全停用正在讨论的资源的缓存。创建一个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

问题显然不客户端和服务器端代码之间进行区分。

首先,当用户关闭网页浏览器时,您无法清除缓存,因为浏览器不见了。也就是说,您可以跟踪图像更改并在图像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