2010-12-29 6 views
0

일부 기능을 처리하고 결과를 JSP 페이지로 보내는 Java HttpServlet 클래스와 함께 작동하는 "look up"html 페이지가 있습니다.세션 속성을 유지하는 방법

조회를 수행하려면 다른 서블릿의 세션에 넣는 loginresult 객체가 필요합니다.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     // get attributes that were filled in on the login webpage 
     request.getAttribute("username"); 
     request.getAttribute("password"); 
     String username = request.getParameter("username"); 
     String password = request.getParameter("password"); 
     LoginManager loginManager = new LoginManager(username.trim(), password.trim()); 
     if (loginManager.doLogin() == true) { 
      javax.servlet.http.HttpSession session = request.getSession(); 
      session.setAttribute("loginResult", loginManager.getLoginResult()); 
      session.setAttribute("binding", loginManager.getBinding()); 
      response.sendRedirect("lookup.html"); 

이 내 JSP 페이지에서 찾아 볼 서블릿

request.setCharacterEncoding("UTF-8"); 
      response.setContentType("text/html"); 
      javax.servlet.http.HttpSession session = request.getSession(); 
      LoginResult lr = (LoginResult) session.getAttribute("loginResult"); 
      if(lr == null) 
      { 
       throw new Exception("Your session has expired, please log in again"); 
      } 

      // some look up code 

      RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp"); 
      request.setAttribute("result", result); 
      request.setAttribute("question", question); 
      request.setAttribute("xml", xml); 
      dispatcher.forward(request, response); 

에서 다음을 수행하는 입력 버튼입니다 무슨이다 :

은 로그인 서블릿에서 일어나는 것입니다 온 클릭 = "window.location.href = 'lookup.html'"//

간혹 결과 페이지를 초점이 맞지 않거나 최소화하거나 너무 오래 기다리면 검색 페이지로 돌아갑니다. e는 내 loginresult 객체 == null로 보입니다. 제 의견으로는 이음매가 만료되었습니다. Apache Tomcat 서버가 세션을 30 분 동안 유지한다고 생각했지만.

내 세션 속성이 사라지는 이유는 무엇입니까?

+0

나는 현명한 제안을하기 위해 세션 속성을 만드는 방법과 나중에 사용하는 방법을 포함하는 코드를 게시해야한다고 생각합니다. –

+0

"조회 페이지로 돌아 가기"라는 구는 분명하지 않습니다. 로그인했으면 조회 페이지로 간 다음 잠시 동안 페이지를 나가고 다시 열린 페이지 (조회 페이지)를보고 세션이 사라집니다. 정확히 "반환"이란 뜻은 무엇입니까? –

+0

로그인 한 후 조회 페이지로 이동합니다. 조회 페이지에서 조회 할 수 있습니다. 결과는 결과 페이지에 표시됩니다. 결과 페이지에서 조회 페이지로 돌아갈 수 있습니다. 세션 속성이 존재하는 한 다시 조회 할 수 있습니다. 그래서 나는 사용자의 브라우저가 열려있는 한 세션을 지속하기를 원합니다. –

답변

1

먼저 동일한 세션을 실제로 사용하고 있는지 확인해야합니다. 내가 이것을 할 수있는 두 가지 쉬운 방법이 있습니다.

1.) JSESSIONID 쿠키의 내용을보십시오. 대부분의 브라우저는 이것을 사소한 것으로 만듭니다. 내용이 변경되면 다른 세션을 수신하게됩니다.

2. 세션이 파괴 될 때 로그하기 위해 HttpSessionListener를 연결해보십시오.

새로운 세션을 얻으려면 구성 문제 (Tomcat, web.xml, 컨텍스트 스 니펫 등) 또는 앱 문제로 범위를 좁혀 야합니다. 구성 문제라면 문제는 언급 한 페이지 이외의 페이지에서 반복 가능해야합니다.

getSession (false) 사용도 고려하십시오. 아직 세션이없는 경우 새 세션을 만들지 않습니다. 이것으로부터 null을 취득하면 (자), 세션이 타임 아웃하고있는 것을 나타내는 또 다른 지표가됩니다.

동일한 세션을 갖고 있지만 이상한 이유로 인해 속성이 사라진 것으로 판단되면 항목이 세션에서 제거 될 때 HttpSessionAttributeListener와 로그 또는 중단 점을 구현할 수 있습니다.

+0

감사합니다. 덕분에 많은 도움이되었습니다. 결과 페이지로 이동하여 새 브라우저 창을 열면 내 결과 페이지에 초점이 맞추어지지 않습니다. 1 ~ 2 분 후에 httpsession이 삭제됩니다. –

관련 문제