最近在开发微信公众号应用,微信的坑不少,一个图片缓存问题弄得欲仙欲死,试了各种方法,最后通过时间戳解决了,现在放一下解决方案,后续查验。

1.url上加参数

url + "?timestamp=" + new Date().getTime()
或者
url + "?math" + Math.random();

加一个参数,不影响返回的结果系统会认为这是一个新的请求,从而不会从缓存中读取。

2. cache为false

  cache: false,

使用的ajax异步请求,设置这个属性让ajax不缓存。

3.header加入禁止缓存的属性

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");//内容过期时间 强制浏览器去服务器去获取数据 而不是从缓存中读取数据
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");//标记内容最后修改时间
    header("Cache-Control: no-store, no-cache, must-revalidate");//强制不缓存
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");//禁止本页被缓存
    header("Access-Control-Allow-Origin: *"); // Support CORS

4.加上请求头If-Modified-Since和Cache-Control如下

 $('.msg_tips', page).show();
$.ajax({
    url: url + "?timestamp=" + new Date().getTime(),
    cache: false,
    beforeSend :function(xmlHttp){
        xmlHttp.setRequestHeader("If-Modified-Since","0");
        xmlHttp.setRequestHeader("Cache-Control","no-cache");
    },
    async:false,
    success: function(resp){
        //do  something
    }
});
以上四个写入代码,都没有效果,接下来说几个有效果的
  1. 使用微信内置的浏览器打开“debugx5.qq.com”清理,打开之后往下滑动,选定进行缓存清除
  2. 微信->我的->设置->通用->微信存储空间,这个流程看一下你还有多少存储空间,然后返回去,就刷新了,很玄学啊,微信开发者很厉害
  3. 取消公众号关注
  4. 手机进入应用管理删除微信缓存

以上几个管用,但是,作为开发者,你做出来程序让用户也这样操作,那怕是秀逗了。没办法,再在网上找其他的,知道我看到了网上这个<link href="colpick.css?v=20190110" rel="stylesheet">,收到启发,我思考给图片加一个时间戳怎么样。
代码如下:

 $poster_filename = md5('name1:name2:'.$uid).'-'.TIMESTAMP.'.png';

说一说我遇到的具体问题,用户可以自己编辑商品海报,编辑完成之后看效果,这个代码开发哥们是写的每次生成一样名字的图片,进行覆盖,但是微信的缓存你懂得,各种刷新不出来,或是隔上一段时间。

简单来说,加了时间戳,当海报有改动就会自动生成新的图片,不像以前一样重名覆盖,新的名字微信自然从服务器重新读取,缓存问题解决了,至于是否会重复生成,因为写入了数据库,每次调用图片都是直接读取数据库在调用图片,除非你更改海报,否则不会有新的图片生成。还有刷新缓存机制,其实就是删除图片,理论不会图片爆棚的。

最后修改:2019 年 01 月 10 日
如果觉得我的文章对你有用,请随意赞赏