如何让浏览器不缓存网页?

结贴是美德 2012-01-14 12:07:18
我在做一个登录权限方面的东西,想在用户注销后禁止通过后退再看到系统内部的内容。

我在html页面中加入了下面的信息:
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

但是没有效果,我是不是写的不对?请指教~~谢谢
...全文
563 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
结贴是美德 2012-01-14
  • 打赏
  • 举报
回复
成了!!!简直是大侠 谢谢哈 接分
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
知道了,因为你用的不是POST,而是直接指定目标URL切页,这个比较狠,要增加另一个参数:

response.setHeader("Cache-Control", "no-cache, no-store");

1) no-cache:强制缓存从服务器上获取新的页面
2) no-store: 在任何环境下缓存不保存任何页面


我Chrome下测试过没问题,你试试看吧。
结贴是美德 2012-01-14
  • 打赏
  • 举报
回复
谢谢这位大哥 无论能不能解决问题 小弟先谢谢了!!


<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%!int counter = 0;
synchronized void counterFunction() {
counter++;
}
%>

<%
response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server

String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<%
counterFunction();
%>


下面这个事显示数字的:


网站计数器
<br> 您是第<%=counter%>位访问者
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
方便的话,把计数的代码发来看看
结贴是美德 2012-01-14
  • 打赏
  • 举报
回复
为了试验到底缓存没有,我在jsp页面写了一个计数的小函数,每次访问就曾1。
然后我就开始测试了:

我先打开一次那个jsp页面,计数为1
然后再地址栏输入baidu的地址,跳到百度。。
最后按后退按钮,看到计数仍然为1 T_T

我是在自己电脑上用myeclipse,没有什么代理服务器的问题吧。
我在想难道tomcat进行服务器端缓存了????
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
不会啊,从这个来看,浏览器应该已经收到服务器端关于缓存的建议了。

你看最上面:

GET /BM/ 200 OK locolhost:8080 1.8KB

说明确实是直接跟服务器获取的数据.

200表示服务器返回正常,如果是缓存请求,返回应该是304(no modify)。
1.8KB 也就是这个页面的大小了(不含图片、JS等)。



你的问题是啥?
结贴是美德 2012-01-14
  • 打赏
  • 举报
回复
无语了。。。我已经照您说的做了

在firebug里仍然看到这个:


浏览器明显忽略了。。。
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
jsp里面不需要写HEAD那三句话。两种方式的作用时机不同的,JSP是写入HTTP的协议头,理论上让浏览器更提前知道。当然对于浏览器来说最终效果应该一致,但如果中间存在缓存服务器或代理服务器就是另一回事了。

JSP直接在页面的最上方(也就是尽量是第二行开始就是),写:
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
其实我更建议写在filter中。

另外,为了让浏览器生效,你得先把浏览器的缓存清一次,确保浏览器已经知道这个页面有这三句话。
结贴是美德 2012-01-14
  • 打赏
  • 举报
回复
俺说错了。。。是在jsp页面里

我再jsp里面已经写上了:
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

但是不管用啊 我觉得这三句和你说的:
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server

应该是一样的效果吧 但是没有效果啊 大侠
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
解释下HTML的话,要类似这样:
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>
如果是框架页面,最外层框架别漏了。


话说,“想在用户注销后禁止通过后退再看到系统内部的内容”,怎么会是HTML呢?

JSP那个,其实我们一般写在filter里面。
MiceRice 2012-01-14
  • 打赏
  • 举报
回复
如果是HTML的话:
检查下上面三句话是否在<head>中

如果是JSP的话:
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server


另外注意检查下IE设置。


52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧