您的位置:首页 > Web前端 > HTML

html 缓存控制

2015-12-14 00:00 447 查看
关于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);

此时,每次访问同样无权限的菜单时,它都会向服务器发出请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: