日期:2014-05-20  浏览次数:20707 次

页面后退无法 sendRedirect
用Filter做了个登陆验证的,所有JSP action 都能拦截下来,若不登陆都会转向login.jsp

Java code

public String logout() throws Exception {

        HttpServletResponse response = ServletActionContext.getResponse();
        response.setHeader("Cache-Control","no-cache");    
             response.setDateHeader("Expires", 0);
             response.setHeader("Buffe","True");
             response.setHeader("ExpiresAbsolute","Now() - 1");
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.removeAttribute("user");
        session.removeAttribute("sessionKey");
        session.invalidate();
        return SUCCESS;

}



Java code

if ( user == null) {
            response.setHeader( "Pragma ", "No-cache ");   
            response.setHeader( "Cache-Control ", "no-cache ");   
            response.setDateHeader("Expires",0);
                      System.out.println("没有登录");
            response.sendRedirect(request.getContextPath()+"login.jsp");



现在有个问题: 当在 a.jsp 退出登陆后,注销 session ,跳到login.jsp ,再点 页面后退,
这时就回到 a.jsp(能打印“没有登陆”), 但sendRedirect 就不起作用了。a.jsp里有多个action与服务端交互,
都可进入if ( user == null){} 但就是不执行 sendRedirect。请问如何解决 若不登陆都跳向 login.jsp

response.setHeader缓存的办法依然不起作用,在页面<meta>的方法可以跳转,但要在所有页面标记<meta>太麻烦,何况禁用缓存读取页面不太有效率。

请问除禁用缓存的其他方法?

------解决方案--------------------
这个是被浏览器给缓存了,感觉不用meta没什么好办法吧,又不可能去更忙乱浏览器的缓存设置。
------解决方案--------------------
后退没有在服务器上处理,只是客户端浏览器的缓存。