html 缓存控制

关于url权限的控制,遇到这样的问题。
A用户对A菜单有权限访问。
B用户对A菜单无权限访问。
A用户登陆系统后,直接输入A菜单的url,可以访问。
此时,A用户退出。
B用户登陆系统后, 直接输入A菜单的url,不可以访问。
跳转到登陆页面。
此时,A用户登陆后, 直接输入A菜单的url,不可以访问(同时也没有向服务器发现该url的请求)。
一直不明白,为什么这造成这样的原因?
说是session没清除?
当无权限时,会执行如下代码:
      //没权限,清空session中的值
 session.invalidate();
 String url = request.getContextPath();
 response.setContentType("text/html;charset=UTF-8");
 //response.setHeader("Pragma","No-cache");
 //response.setHeader("Cache-Control","no-cache");
 //response.setDateHeader("Expires", 0);
 PrintWriter out = response.getWriter();
 out.print("<meta   http-equiv='Content-Type'   content='text/html;charset=UTF-8'>");
 out.print("<script>");
 out.print("alert('你没有足够的权限进行此操作!');");
 out.print("parent.document.location.href='" + url + "';");
 out.print("</script>");
 out.close();
同时,如果是关闭IE重新用A用户登陆访问A菜单,就可以。
经分析,目前认为是这样:
当无权限访问时,首次会执行这段代码。
然后,无权限的url的内容就被替换为上述代码所形成的静态页面(html)的内容了。
记得IE有这么一种功能,客户端第一次向服务器发出请求,服务器响应,客户端收到请求后,存入当前会话缓存中。
当客户端第二次向服务器发现同样的请求时,实际上,IE并没有马上就向服务器发出请求,而是先查询本地的缓存中,
是否存在相同请求的内容,如果有,直接返回该内容,如无(上次的请求在此刻已失效),才再次向服务器发出请求。
这也就是为什么会出现这样情况的原因。
然后,在形成此html内容时,在响应头添加相关属性(将响应设为无缓存控制),如下:
 response.setHeader("Pragma","No-cache");
 response.setHeader("Cache-Control","no-cache");
 response.setDateHeader("Expires", 0);
此时,每次访问同样无权限的菜单时,它都会向服务器发出请求。

转载于:https://my.oschina.net/u/2552902/blog/543927

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值