我现在在做一个系统,我想让点击“退出”链接后就把用户导航到登陆界面,并且通过“退出”链接触发js方法使session失效,达到用户必须登陆才能再进入系统。我“退出”触发的js方法中调用了setAttribute("user",null),session.invalidate()等方法都不管用,因为页面的其他地方也用到了session传递的参数,导致其他用到session的地方出错。
我的问题是:怎样达到点击“退出”链接后退出系统并且使该用户必须在登陆才能进入系统?是通过使session失效吗?怎么做呢?求大侠指导、指导~

解决方案 »

  1.   

    点按钮跳action中清session 在跳系统主页面
      

  2.   

    登录的时候,做点处理,叫浏览器不缓存,这样用户按“后退”也看不到主界面Listing 1 
    //...
    //initialize RequestDispatcher object; set forward to home page by default
    RequestDispatcher rd = request.getRequestDispatcher("home.jsp");//Prepare connection and statement
    rs = stmt.executeQuery("select password from USER where userName = '" + userName + "'");
    if (rs.next()) { 
     //Query only returns 1 record in the result set; only 1 
     password per userName which is also the primary key
     if (rs.getString("password").equals(password)) { //If valid password
      session.setAttribute("User", userName); //Saves username string in the session object
     }
     else { //Password does not match, i.e., invalid user password
      request.setAttribute("Error", "Invalid password.");   rd = request.getRequestDispatcher("login.jsp");
     }
    } //No record in the result set, i.e., invalid username
    else { request.setAttribute("Error", "Invalid user name.");
     rd = request.getRequestDispatcher("login.jsp");
    }
    }//As a controller, loginAction.jsp finally either forwards to "login.jsp" or "home.jsp"
    rd.forward(request, response);
    //... 退出就方便了Listing 2 
    //...
    session.removeAttribute("User");
    session.invalidate();
    //... 
      

  3.   

    直接 session.removeAttribute("User");