2010-01-04 5 views
2

15 분 동안 사용하지 않으면 Tomcat이 세션을 처리하도록 설정했습니다. 사용자가 제한된 페이지 나 로그인 프로세스가 완료되었는지 확인 세션을 확인 (사용자의 로그인이 필요 하나)에 액세스 할 때마다이세션이 만료되었음을 사용자에게 알려주려면 어떻게해야합니까?

<session-config> 
    <session-timeout>15</session-timeout> 
</session-config> 

비슷 해요. 그런 다음 액세스 권한이 부여되지 않은 경우 액세스 권한이 부여 된 경우 사용자는 유효한 ID와 암호를 묻는 로그인 페이지로 리디렉션됩니다. 세션 시간이 초과되면 사용자는 다시 로그인해야합니다. 그리고 이것은 괜찮습니다.하지만 세션이 시간 초과 되었기 때문에 다시 로그인해야한다는 것을 사용자에게 알리고 싶습니다.

어떻게해야합니까? HttpSessionListener 인터페이스를 발견하고 도움이 될 수 있다고 생각했지만 세션이 무효화되기 전에 sessionDestroyed 메서드가 호출되기 때문에 예상대로 매개 변수를 설정하지 않아도됩니다.

답변

2

로그인 할 때 정상적인 로그 아웃 중에 제거한 긴 생활 쿠키 (1 일?)를 설정하십시오 (연령을 0으로 설정). 사용자가 로그인하지 않은 상태에서 로그인 페이지를 다시 열어도 쿠키가 계속 남아 있으면 세션이 만료되었음을 의미합니다.

<c:if test="${empty user && not empty cookie.user}"> 
    You were logged out because the session was expired. 
</c:if> 
2

사용자를 로그인 양식으로 리디렉션 할 때 요청 매개 변수, url 매개 변수 또는 세션이 만료되었음을 나타내는 쿠키 (쿠키를 사용하는 경우 로그인 양식을 표시하면 쿠키 지우기)를 설정하십시오. 그런 다음 양식을 표시 할 때 세션 만료 표시기를 확인하고 적절한 메시지를 표시하십시오.

+0

세션이 만료되면 실제로 ** ** 해당 매개 변수/쿠키를 설정하기가 어렵습니다. 언제 * 할 것인지 결정할 것입니까? 세션이 만료되는 동안 'HttpServletRequest'를 사용할 방법이 없습니다. 이후의 새로운 요청/세션에는 이전 요청/세션에 대한 지식이 없습니다. – BalusC

+0

사용자가 로그인 할 때 사용자 브라우저에 쿠키를 넣고 HttpSession에 토큰을 넣습니다. 쿠키가 있고 세션 또는 토큰이없는 경우 최근에 사용자가 로그인되어 세션이 시간 초과되었습니다. –

+0

예. 정확하게 대답했습니다. 하지만 당신은 문자 그대로 * 로그인 양식으로 사용자를 리디렉션 할 때 *. 어떻게 그럴 수 있니? – BalusC

2

당신은 세션이 만료 및/또는과 시간이 초과 된 경우 확인할 수 있습니다

if (request.getRequestedSessionId() != null 
     && !request.isRequestedSessionIdValid()) { 
    // Session is expired 
} 

사용 getRequestedSessionId는 신규 및 기존 (만료/유효) 세션을 구별하고, betwheen을 구별하는 isRequestedSessionIdValid를 사용 유효한 세션과 만료 된 세션.

이 코드는 Filter에 넣을 수 있습니다.

+1

그건 좋은 발견이야. EL에서 이것을 할 수도 있습니다. 요청은'$ {pageContext.request} '에 의해 접근 가능합니다. – BalusC

+0

감사합니다. 아주 좋은 접근 방법입니다. – pgmura

관련 문제