用户退出系统时,这时清空session,当用户点击后退时,由于找不到session,就会出错,这种情况怎么解决
我个人觉得以下两种方法有弊端:
1,禁用浏览器后退:这样给用户带来不便
2,在每个action前判断session是否为空:这样做很烦索
我觉得是否可以写一个过滤器,判断session是否为空,为空转到登录页,可是我写了一个,不起作用,是不是对于浏览器后退不起作用请朋友们帮忙看看,有什么更好的方法呢?

解决方案 »

  1.   

    httpSessionListener给session添加一个监听器试试
      

  2.   

    可以使用listener 或者使用filter,我推荐使用filter,如果检查session里面中的一个attribute的值为null,则出错,你就把页面专项你自己定义的页面。
      

  3.   

    一般做法是写一个BaseAction,里面是一些通用的Action处理,比如检查Session, 初始化通用数据等,最后调用一个抽象函数(留给子类实现),然后其他所有的Action都从它继承并实现抽象函数,那样每个Action开始就会自动执行检查Session等动作
      

  4.   

    我这样写有问题吗?当用户后退时,不起作用呀,1处有显示,2处就没有显示public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
    System.out.println("check session start!!!");//1
    HttpSession session = ((HttpServletRequest) request).getSession(false);
    if(session==null){
    System.out.println("session is null!!!");//2
    ((HttpServletRequest) request).getRequestDispatcher("login.jsp").forward(request,response);
    }
    }
      

  5.   

    用filter,不过getSession的时候要记得加上参数false
      

  6.   

    先写个filter,禁止客户端缓存
    这样就算点击“后退”也会重新发起请求
    然后再用你这个filter来检查session
      

  7.   

    页面的jsp里加上    response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
      

  8.   

    还有更好的方法吗?
    同时,也希望楼上的大哥帮忙看看这个问题,小弟急用,万分感谢!!
    http://community.csdn.net/Expert/topic/4273/4273336.xml?temp=.5598108
      

  9.   

    你写了filter,是否在web.xml中设置了过滤的参数啊?不可能不起作用的。