今天实现网站注销功能时,须要清除cookie缓存,开始在网上搜索的是“js清除缓存”,发现不少都是预先防患缓存存储的内容,千篇一概,不过也学习到了;后来换成"js清除cookie"才找到本身想要的结果。javascript
先学习一下预先防治缓存存储的方式吧css
在http中,控制缓存开关的字段有两个:Pragma 和 Cache-Control,后者拥有最高优先级,只要与其余设置相抵触,一概覆盖之。java
Pragma有两个字段Pragma和Expires。Pragma是http1.0字段,值为no-cache时,表示禁用缓存,当一个no-cache请求发送给一个不遵循HTTP/1.1的服务器时,客户端应该包含pragma指令; Expires的值是一个GMT时间,表示该缓存的有效时间,优先级低于Cache-Control:max-age,二者同时出现,expires被覆盖;若是都没有出现。也没有其余缓存,则浏览器默认采用启发式算法,取Date_value-Last-Modified_value(请求资源最后一次修改时间)值的10%做为缓存时间ajax
Pragma是旧产物,已经逐步抛弃,有些网站为了向下兼容还保留了这两个字段。若是一个报文中同时出现Pragma和Cache-Control时,以Pragma为准。同时出现Cache-Control和Expires时,以Cache-Control为准。即优先级从高到低是 Pragma -> Cache-Control -> Expires算法
以两个经常使用值举例 no-cache: 无论本地副本是否过时,浏览器、缓存服务器在使用资源副本前都要到源服务器进行副本有效性校验。浏览器
must-revalidate:本地副本过时前,浏览器、缓存服务器可使用本地副本;本地副本一旦过时,必须去源服务器进行有效性校验。缓存
头部设置服务器
<!--在头部加上此三句便可禁用缓存-->cookie
<meta http-equiv="pragma" content="no-cache" />dom
<meta http-equiv="content-type" content="no-cache, must-revalidate" />
<meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT"/>
reset清除表单的临时缓存
<body onLoad="javascript:document.表单名.reset()">
ajax获取情书数据加上请求头
$.ajax({
......
beforeSend :function(xmlHttp){
//缓存校验字段,值为资源最后一次的修改时间,即上次收到的Last-Modified值
xmlHttp.setRequestHeader("If-Modified-Since","0");
//至关于max-age:0,must-revalidate即资源被缓存,可是缓存马上过时,同时下次访问时强制验证资源有效性
xmlHttp.setRequestHeader("Cache-Control","no-cache"); },
success:function(response){
//操做
}
async:false
});
ajax请求数据直接不缓存
$.ajax({
......
cache:false, //不进行缓存
success:function(response){
//操做
}
async:false
});
利用随机数与时间戳让每次请求不相同,不只是页面,js、css等资源也可使用这样的方式
URL 参数后加上 "?ran=" + Math.random(); 或 "?ran=" + new Date().getTime(); //固然这里参数 ran能够任意取了
用当前页面覆盖原页面防止回退
window.location.replace("你要覆盖的页面");
而后是js对cookie的操做
设置cookie
document.cookie="key="+value;//cookie通常以键值对的方式存在,也能够自定义储存方式
获取cookie
cookieArray=document.cookie.split(';');
for(var i=0;i<cookieArray.length;i++){
//操做;key:cookieArray[i].split('=')[0];value:cookieArray[i].split('=')[1]
}
删除cookie只须要设置时间过时便可
document.cookie=key+"="+你想操做的cookie+":expire="+new Date(0).toGMTString();