2012-04-19 7 views
1

사용자가 연결된 HttpSession 개체가 있고 응용 프로그램에서 "로그 아웃"하려는 경우 HttpSession을 무효화하면 맵에서 ServletContext가 모든 세션을 유지합니다. 그러나 이것은 서버 측에서만 제거합니다. 클라이언트 측에서 어떤 일이 발생합니까? 사용자는 여전히 세션 ID가 더 이상 서버에 상응하는 세션 객체를 가지고 있지 않은 쿠키를 계속 유지하고 이것을 웹 서버에 계속 보냅니 까? 그리고 사용자가 로그 아웃 한 후 다시 로그인하기를 원하면 어떻게됩니까?세션 무효화

+0

클라이언트 측 코키도 무효화 할 수 있습니다. –

+0

사용자가 sessionId를 다시 연결하려고 시도하면 세션이 연결되지 않습니다. – tom

답변

2

sessionId 쿠키는 계속 보관되지만이 sessionId는 서버 메모리의 세션 개체와 일치하지 않기 때문에 다음에 사용자가 다시 로그인하려고 시도 할 서버에 의해 삭제됩니다. 서버 쪽에서는 매우 투명 해지며 request.getSession()은 새로운 세션 객체를 자동으로 반환합니다.

+0

Okey하지만 이전 쿠키는 유효하지 않을 때까지 남아 있습니까? – user626912

+0

브라우저 구현에 따라 다르지만 대부분의 경우 만료 될 때까지 쿠키가 유지됩니다. 만료 시간은 tomcat의 config와 같이 서버에 의해 결정됩니다. 30 maksimov

1

답글에 을 추가하고 싶습니다. maksimov.

쿠키가 클라이언트 측에서 계속 존재하더라도 서버가 클라이언트 측에서도 쿠키를 삭제할 수 있습니다. Spring Security는 사용자가 로그 아웃 할 때이를 수행합니다.

Cookie cookie = new Cookie(cookieName, null); 
String cookiePath = //cookie's path 
cookie.setPath(cookiePath); 
cookie.setMaxAge(0); 
response.addCookie(cookie); 

중요한 명령은 cookie.setMaxAge(0)입니다 : 여기에 코드입니다. 최대 수명을 0으로 설정하면 쿠키를 삭제해야합니다. 따라서 서버는 클라이언트에게 max age가 0 인 동일한 쿠키를 보내어 쿠키를 삭제하도록 요청할 수 있습니다.