解决:在点击用户退出登录时,再按浏览器的后退按钮,仍然能够看到之前的页面...

 

需要在服务器返回的response header里面设置Cache-control为"no-cache, no-store",而不是在页面中添加META

 

response.setHeader("Cache-Control","no-cache,no-store");     
response.setHeader("Pragma","no-cache");     
response.setDateHeader ("Expires", -1); 

 ================================================================================

转:http://blog.163.com/xiaokangzhijia@126/blog/static/16595485620106171354509/

 

 

方法如下:

一、

1.当你点击退出系统是,不直接返回登录界面,而是通过window.location.href返回登录界面。
2..或者在每张页面都有session判断,如果session为空则返回登录界面

二、

1.浏览器缓存
   我们有时候会发现是退出系统了可是通过历史记录或者直接访问地址,最后一次操作的数据或显示的列表还在那里,一堆人在冒汗,说你系统不安全!
   其实这时候并没有访问到系统,是本地的浏览器缓存在做怪。
2.没有做权限拦截
   很多人在做程序的时候可能会忘记去注意权限分配了,有些功能是要求用户在登录状态下使用的,甚至是某个角色的用户才可以操作的。如果没有做这些限制,很容易被人利用,最简单的就是通过地址直接访问。

这两个方面内容是造成问题出现的绝大部分原因.

解决方案:

1.禁止缓存

如:jsp
<%
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);
%>

2.利用session在页面进行拦截

如:jsp原码

String userid= (String)session.getValue("userid");
if(userid==""||userid==null)//判断指定session值的存在与否,来检查是否已经登录
{
  跳转到提示页面
}
else
{
  其他主体程序代码
}

利用以上两个方法同时使用,能够解决大部分问题,包括浏览器返回的问题。

3.利用struts配置拦截器
4.涉及权限的就不能简判断有没有登录了,应该取出用户的权限值(一般也建议放入session,避免频繁访问数据库)来判断是否可以执行,处理思路也和判断有无登录相同
如:jsp
String level= (String)session.getValue("level");
if(level==""||level==null||!level.equals("1"))//判断指定session值的存在与否并检查权限值
{
  跳转到提示页面
}
else
{
  其他主体程序代码
}

三、
这里的方法是千姿百态,有的是更改浏览器的历史纪录的,比如使用window.history.forward()方法;有的是“用新 页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后退按钮永远不会变为可用。”比如使用 javascript:location.replace(this.href); event.returnValue=false;

你可能感兴趣的:(java,jquery)