Safari下禁止读取缓存的解决方案
来源:互联网 发布:linux初级运维面试题 编辑:程序博客网 时间:2024/06/17 04:58
相信很多人都遇到了safari浏览器的缓存问题。Safari默认会缓存页面的完整状态,当由A页面进入到B页面后,然后点击浏览器的后退按钮退回A页面,这会后safari会直接从cache中读取页面。在绝大多数情况下,这种行为是有很好的用户体验的,但是在某些情况下,我们不希望浏览器读取缓存的页面,比如一些银行,金融,支付系统,需要实时的读取数据。那么如何解决这个问题呢?
一种最常见的方式,就是在响应头中加入一些内容,PHP代码如下:
<?phpheader("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the pastheader("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modifiedheader("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache"); // HTTP/1.0
加上上面这些header,可以让页面在大多数浏览器中都不缓存。但还是有个问题,上面的代码对safari的前进和后退不起作用,safari还是会在缓存里面读取数据。要做到完全禁止,根据官方的Safari Developer FAQ,还需要在页面中加上一个iframe。加上iframe后的页面,safari永远不缓存。
<iframe style=”height:0px;width:0px;visibility:hidden” src=”about:blank”> this frame prevents back forward cache</iframe>
网上很多人都推荐这个方法,但是尝试之后不管用。最后在stackoverflow上看到一种还算不错的方案,通过javascript去强制页面reload。我对这个方法做了一点强化,任何页面如果不需要缓存,可以在body元素上加上no-cache这个class,那么下面的方法都会让页面强制重刷。
if (isSafari()) { $(window).bind("pageshow", function (event) { if (event.originalEvent.persisted && $('body').hasClass("no-cache")) { document.body.style.display = "none"; window.location.reload(); } });}function isSafari() { if (navigator.userAgent.indexOf("Safari") > -1) { return true; } return false;}
如果有更好的方式,请指教!
0 0
- Safari下禁止读取缓存的解决方案
- 禁止ie下的ajax 缓存
- 禁止webbrowser弹出窗口,禁止webbrowser读取缓存
- Apache下禁止php文件被直接访问的解决方案
- safari无法上网的一种解决方案
- Android下读取PDF文件的解决方案
- 解决FF和safari下文本禁止选择的问题
- 禁止选择文本的css(chrome,safari,firefox等)
- 禁止页面缓存的方法
- 禁止网页缓存的方法
- html禁止缓存的方法,asp禁止缓存的方法,php禁止缓存的方法,jsp禁止缓存的方法
- html禁止缓存的方法,asp禁止缓存的方法,php禁止缓存的方法,jsp禁止缓存的方法
- 禁止页面缓存的方法
- 禁止页面缓存的办法
- 踩坑路上——IOS Safari浏览器下固定定位position:fixed带来的问题与解决方案
- mobile safari 下overflow:auto的解决方法
- safari浏览器下 input 表单的阴影
- mobile safari 下overflow:auto的解决方法
- IOS block编程指南 3 概念总览
- g729源码分析-11-后置滤波处理(二)
- 关于职业规划等问题
- java方法的重载与覆盖的返回值类型
- FFmpeg源代码简单分析:libswscale的sws_getContext()
- Safari下禁止读取缓存的解决方案
- 分享下3.16-android面试
- 监控系统Metis方案设计
- IOS知识点大集合
- Could not create JarEntryRevision for [jar:file:/C:/Program%....
- Spring MVC 框架搭建配置方法及详解
- 修改本机mysql密码
- 常用预处理命令简介及应用
- 成都会计师代理记帐报税