欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

前端不缓存,ajax不缓存,js操作cookie

程序员文章站 2022-07-02 12:54:51
今天实现网站注销功能时,需要清除cookie缓存,开始在网上搜索的是“js清除缓存”,发现很多都是预先防患缓存存储的内容,千篇一律,不过也学习到了;后来换成"js清除cookie"才找到自己想要的结果。 先学习一下预先防治缓存存储的方式吧 在http中,控制缓存开关的字段有两个:Pragma 和 C ......

今天实现网站注销功能时,需要清除cookie缓存,开始在网上搜索的是“js清除缓存”,发现很多都是预先防患缓存存储的内容,千篇一律,不过也学习到了;后来换成"js清除cookie"才找到自己想要的结果。

先学习一下预先防治缓存存储的方式吧

在http中,控制缓存开关的字段有两个:pragma 和 cache-control,后者拥有最高优先级,只要与其他设置相抵触,一律覆盖之。

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%作为缓存时间

pragma是旧产物,已经逐步抛弃,有些网站为了向下兼容还保留了这两个字段。如果一个报文中同时出现pragma和cache-control时,以pragma为准。同时出现cache-control和expires时,以cache-control为准。即优先级从高到低是 pragma -> cache-control -> expires

以两个常用值举例 no-cache: 不管本地副本是否过期,浏览器、缓存服务器在使用资源副本前都要到源服务器进行副本有效性校验。

must-revalidate:本地副本过期前,浏览器、缓存服务器可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

头部设置

<!--在头部加上此三句即可禁用缓存-->

<meta http-equiv="pragma" content="no-cache" />

<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();