2015-01-31 3 views
1

모든 것이 잘 작동하는 자바 로그인 애플리케이션을 만들었지 만 로그 아웃 버튼을 클릭하면 성공적으로 로그 아웃되고 index.jsp로 리디렉션됩니다.하지만 인쇄 할 경우 index.jsp 페이지로 리디렉션됩니다. 세션 값을 누른 다음 동일한 인쇄, 나는 왜 그런지 모르겠다 ?? 그러나 로그 아웃 할 때 세션을 종료했습니다. 아래 코드는 가능한 이유를 제안하십시오 :로그 아웃 후 세션이 종료되지 않습니다

on index.jsp 페이지 다음은 wheather 세션이 있는지 확인하는 코드입니다. 로그 아웃이 인쇄 된 후 ... loginServlet.java

String name = ""; 
      JSONObject obj = result_array.getJSONObject(0); 
      String res = obj.get("result").toString(); 
      HttpSession session = null; 
      if (res.equals("true")) { 
       try { 
        name = obj.get("name").toString(); 
        session = request.getSession(true); 
        session.setAttribute("username", name); 
        session.setAttribute("uniqueID", uname); 
        //setting session to expiry in 15 mins 
        session.setMaxInactiveInterval(15*60); 
        Cookie userName = new Cookie("user", uname); 
        userName.setMaxAge(15*60); 
        response.addCookie(userName); 

        if("0".equals(obj.get("role").toString())) 
        { 
         session.setAttribute("role", "user"); 
         response.sendRedirect("home.jsp");       
        }       
        else if("1".equals(obj.get("role").toString())) 
        { 
         session.setAttribute("role", "admin"); 
         response.sendRedirect("AdminHome.jsp");       
        } 
       } 
       catch (JSONException ex) 
       { 
        System.out.println(getClass().getName()+" = " +ex.toString()); 
        this.context.log(ex.toString()); 
       } 

logoutservlet.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 
//  Cookie[] cookies = request.getCookies(); 
//  if (cookies != null) { 
//   for (Cookie cookie : cookies) { 
//    if (cookie.getName().equals("JSESSIONID")) { 
//     System.out.println("JSESSIONID=" + cookie.getValue()); 
//     break; 
//    } 
//   } 
//  } 
     Cookie loginCookie = null; 
     Cookie[] cookies = request.getCookies(); 
     if (cookies != null) { 
      for (Cookie cookie : cookies) { 
       if (cookie.getName().equals("user")) { 
        loginCookie = cookie; 
        break; 
       } 
      } 
     } 
     if (loginCookie != null) { 
      loginCookie.setMaxAge(0); 
      response.addCookie(loginCookie); 
     } 
     PrintWriter out = response.getWriter(); 
     HttpSession session = request.getSession(false); 
     if (session != null) { 
      session.removeAttribute("username"); 
      session.removeAttribute("uniqueID"); 
      session.removeAttribute("role"); 
      session.invalidate(); 
     } 
     out.print("You have Succefully logged out "); 
     response.sendRedirect("index.jsp"); 
     out.flush(); 
     out.close(); 
    } 
} 

답변

0

기본적으로

<% 
      if (session == null) 
      { 
       System.out.println("session is null"); 
       session.removeAttribute("username"); 
       session.removeAttribute("uniqueID"); 
       session.invalidate(); 
      } 
      else if(session != null) 
      { 
       System.out.println("isession is not null"); 
       System.out.println(session); 
      } 

     %> 

"isession하지 null의"세션이 자동으로 생성됩니다 JSP가 이미 존재하지 않는 한. 따라서 암시적인 session 개체를 다시 확인할 때 로그 아웃 한 후에는 입니다.

당신은 특정 JSP이 기능을 끄려면

<%= session.isNew() %> 

을 인쇄하여이를 확인할 수 있습니다, 당신은 당신의 page 지침의 session 속성을 설정해야합니다. 로그인 한/아웃 상태가 항상 세션 속성의 존재가 아니라 세션 자체의 무효에 의해 결정 될 수 있기 때문에

<%@ page session="false" %> 

이 비록 불필요한 보인다.

관련 문제