2016-07-12 3 views
0

사용자를 로그 아웃 할 때 session.invalidate()를 호출하고 로그인 페이지로 다시 리디렉션하여 세션을 무효화합니다.request.isRequestedSessionIdValid()는 세션을 무효화 한 후 true를 반환합니다.

응용 프로그램의 로그인 페이지 이외의 모든 페이지는 JSP 페이지입니다. 요청한 세션이 존재하고 요청 된 세션 ID가 유효한지 모든 JSP 페이지에서 확인할 것입니다.

사용자를 로그 아웃하고 session.invalidate()를 호출 한 후 내 홈페이지의 URL을 직접 열려고하면 request.isRequestedSessionIdValid()가 true로 반환됩니다. 또한 session.invalidate()를 호출해도 세션이 null이되지 않습니다.

Logout.java 내 home.jsp에서

 session.inValidate(); 

:

다음은 내 코드입니다. 요청한 세션이 유효한지 여부를 명시 적으로 확인하고 있습니다. 다음은 코드입니다 :

  HttpSession session=request.getSession(); 
     boolean a=request.isRequestedSessionValid() 
     if(session==null || a==false){ 
     ... 
     ... 
     } 

문제는 세션이 null을 반환하지 않습니다이며, 심지어 사용자 (세션을 무효화)를 로그 아웃 한 후, 여전히 사실이다.

도움을 주시면 감사하겠습니다.

+0

안녕하세요. 각 코드가 없으면 귀하를 도울 수 없습니다. 또한보십시오 : http://stackoverflow.com/help/how-to-ask –

답변

1

나는 session.invalidate() 를 호출하고 다시 로그인 페이지로 자신을 리디렉션하여 자신의 세션을 무효화하고 있습니다.의 세션이 다음 웹 애플리케이션은, 초기 유효한 세션의 컨텍스트에서 해당 요청을 처리 무효화 된 후 클라이언트가 새 요청을하는 경우

. webapp이 세션 무효화와 새로운 요청 (리디렉션 응답을 포함하되 이에 국한되지 않음) 사이에서 클라이언트에 응답을 보내는 경우, 새 요청은 무효화 된 세션의 ID를 요청하지 않을 것입니다. 세션 연결이 유지되는 방법이 무엇이든지간에 응답은 Webapp에 이전 세션의 끝을 클라이언트에 알릴 수있는 기회를 주기도하기 때문입니다.

클라이언트는이 경우 세션 ID를 요청할 수도 있고 요청하지 않을 수도 있습니다. 그렇지 않으면 request.isRequestedSessionIdValid()false을 반환하는 것을 볼 수 있습니다. 그렇지 않은 경우 request.isRequestedSessionIdValid()false을 반환하는 주요 시나리오는 가장 최근 응답 이후 세션 시간이 초과 된 경우입니다. 사용자가 인증했는지 여부를 결정할 때는이 방법을 사용할 수 없습니다.

사용자를 로그 아웃하고 session.invalidate()를 호출 한 후 내 홈페이지의 URL을 직접 열려고해도 request.isRequestedSessionIdValid()가 true로 반환됩니다.

왜 안 되나요?

또한 session.invalidate()를 호출해도 세션이 null이되지 않습니다.

아니요, 그렇지도 않습니다.세션이 무효화되었는지 여부를 감지하려면 무효화 된 후에 대부분의 메소드가 IllegalStateException을 던질 것이라는 사실을 이용할 수 있습니다. 그러나 적절한 상황에서 IllegalStateException을 잡아서 처리하는 것 이외에 다른 것을 알 필요가 있음을 알게되면 아마도 잘못된 것이 될 수 있습니다.

+0

응답 John을 보내 주셔서 감사합니다. 그래서 기본적으로 내가하고 싶은 것은 사용자를 로그 아웃하는 것입니다. 그래서 나는 그 세션을 무효로하고 있습니다. 이보다 더 좋은 방법인가요? 또한 각 페이지가 JSP이기 때문에. 따라서 각 페이지에서 유효한 요청과 관련된 세션이 있는지 확인하고 그렇지 않은 경우 로그인 페이지를 표시합니다. 그래서, 이것은 다음과 같은 것들을위한 것입니다. facebook.com에서 로그 아웃 한 다음 facebook.com/home을 입력하면 (예) 로그인 페이지가 표시됩니다. 내 접근 방식이 좋지 않습니까? –

+0

사용자를 로그 아웃 할 때 세션을 무효화하는 것은 전적으로 표준입니다. 사용자가 로그인했는지 여부를 결정할 수 있도록하려면 성공적으로 로그인하면 그렇게 표시된 방식으로 세션을 수정해야합니다. 하나의 전형적인 메커니즘은 세션에 속성 (종종 로그인 한 사용자를 설명하는 객체)을 첨부하는 것입니다. 보안을 위해 JAAS를 사용하고 있다면, 그렇게하지 않아도됩니다 :'HttpServletRequest.isUserInRole()'으로 충분할 것입니다. –

+0

JAAS를 사용하지 않고 있습니다. 감사. 그래서, 그것은 어떤 종류의 해킹이어야합니까? 세션에 무언가를 붙이는 것을 의미합니다. –

관련 문제