网站项目安全退出后,由于使用了springmvc中拦截器的配置,基本上不会出现在地址栏中输入链接直接跳转到页面的bug,
但是有一个页面例外,就是left.do,退出后第一次输入该地址仍然会跳转到页面,可再次刷新,就会跳转到登陆页,
为什么每次都会有这么一次缓存呢?
查看对应的jsp页面,发现里面把菜单缓存到了session里面,但是action里面缓存已经清空了啊,怎么还会出现这种状况,难道没有清除掉,下断点,单步跟踪,没问题,session是空的,那问题出在哪了?该不会是客户端缓存了吧,于是在left.jsp页面加入如下三句话,
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">//表示不缓存,立即过期
重复之前的操作,恩,效果不错,再也不会缓存一次了。over!
注意:
HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,使用HTTP/1.0的缓存将忽略Expires和Cache-Control头
Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的
效果。但是如果同时存在,则被Cache-Control的max-age覆盖。
-------------------------------------------------------------------------------------------------------------------
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
普通报头中的Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。
请求时的缓存指令包括:no-cache(用于指示请示或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;
响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
例:为了指示IE浏览器(客户端)不要缓存页面,服务器端的jsp程序可以编写如下:
response.setHeader(“Cache-Control”, “no-cache”);
//response.setHeader(“Pragma”, “no-cache”);作用相当于上行代码,通常两者合用
Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期时间。例:Expires:Thu,15 Sep 2006 16:23:12 GMT
HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。如:为了让浏览器不要缓存页面,也可以利用Expires实体报关域,设置为0,jsp程序如下:
response.setDateHeader(“Expires”, “0”);
//JSP禁止缓存代码
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.flushBuffer();
另,网上各种禁客户端缓存总结如下:
HTM网页
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
ASP网页
<%
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"
%>
PHP网页
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
JSP
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);
C#中禁止cache的方法!
Response.Buffer=true;
Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";
在<%@ Page language="c#" Codebehind="A.aspx.cs" AutoEventWireup="false" Inherits="*.*" %>下面加上以下的代码:
<%@ OutPutCache Location="None"%> 能每次页面Load时都可以清空缓存
相关推荐
1.清除页面缓存,提供操作手册以及资源文件
asp.net,C#页面缓存和清除页面缓存
清楚网页缓存。
有关于jsp页面缓存的介绍及缓存的清除,缓存的解决办法有两种,一种是服务端方法,另一种是客户端方法
完美清除IE缓存和Cookies,以及浏览记录,密码等。 @kingsee。
vue keepAlive缓存清除问题案例详解 vue项目中经常会用到keepalive来做缓存,在应付基本要求上可以说非常方便。但是遇到同一个页面,根据条件不同,分别缓存或者不缓存,就有些麻烦了。 首先先把坑列出来: 1. ...
清除IE浏览器缓存批处理文件,清除的很干净,不用再去操作里设置里删除了。
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_...示例:nginx扩展模型ngx_cache_purge缓存清理插件
chrome缓存清理神器,打开chrome的‘更多工具’->‘扩展程序’页面,然后把这个文件拖进去即可,然后点击右上角出现的圈图标便可一键清缓存,谁用谁知道
OC清除缓存
/* 页面数据缓存 */ var _CACHE_OBJS = {}; function _init_cache(comp, key, cache) { var obj = cache[key]; if (obj !== undefined) { comp[key] = obj; } var deep = typeof comp[key] === 'object'; comp...
IE缓存清理专家是一款专业的IE缓存清理工具,可以按照时间来排序和清理缓存,并且可以精确查找和删除任何一个缓存文件。特别适用于网页游戏玩家,当游戏缓存加载失败时可选择只清理当天的缓存,从而避免了因为清理掉...
利用WinInetAPI清除特定网站的IE缓存
清理Ubuntu的页面缓存, drop vm cache。一般大家在做大型工程的编译时,比如linux kernel,Android等总会遇到内存爆满,系统一旦开始刷新swap就奇慢无比,实际上是因为系统硬件内存部分被占满(其中大部分被载入内存...
利用ECSHOP的计划与任务清除过多的缓存页面文件 重要说明: 1.适用于utf-8编码; 2.原下载包内languages的路径有错误,正确的是:languages\zh_cn\cron\myclr.php
今天小编就为大家分享一篇vue项目强制清除页面缓存的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
浏览器清除缓存自动刷新插件 清除缓存
轻松删除本机浏览网页,安装程序所产生的临时文件
FineReport缓存技术包括数据集缓存和模板结果共享缓存,合理的使用缓存可以有效的提高性能
用C#代码清除IE浏览器的缓存 更方便我们带再次打开第二个网页