Login 처리
로그인 처리 - 쿠키, 세션
- 쿠키(Cookie) 이용한 로그인/로그아웃 처리
- 서버에서 로그인이 성공하면 클라이언트(브라우저)는 서버로 앞으로의 모든 HTTP 응답에 쿠키를 계속 담아서 보내줌.
- 큰 보안상 문제
- 쿠키 값은 마음대로 변경 가능. → 다른 사용자가 보임.
- 쿠키에 보관된 정보 그대로 노출 가능성.
- 대안
- 예측 불가능한 랜덤 토큰을 생성하여 쿠키 값으로 넣어준다.
- 해커가 재사용 못하게 쿠키 만료시간을 짧게 유지한다.
- →
“세션(Session)”
사용하면 해결 가능.
- 세션(Session)
- 중요한 정보는 모두 서버에 저장하고, 클라이언트와는 추정 불가능한 식별자 값으로 연결해야 해야 하는데, 이러한 방법을 세션이라 한다.
- 즉, 서버에서 세션 저장소를 만들고 임의의 랜덤 값을 key값으로 부여하여 관리.
-
클라이언트에게는 이 복잡한 sessionId 값을 쿠키 정보로 넘긴다. 따라서, 쿠키가 털리더라도 중요한 값은 존재하지 않음.
- HttpSession(서블릿에서 제공)
@SessionAttribute
어노테이션으로 →- 세션 유무 확인.
-
객체에 세션 정보 확인해 자동으로 바인딩.
ex)
@SessionAttribute(name = SessionConst.*LOGIN_MEMBER*, required = false) Member loginMember
-
세션 쿠키 생성
// 로그인 성공 처리 -> 세션 쿠키 생성 HttpSession session = request.getSession(); session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
-
로그아웃 → 세션 저장소 정보 삭제
// 세션 가져오고, 없으면 새로 생성은X HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); }
- 세션 타임아웃
- HttpSession → 기본적으로 last accessed time으로부터 1800초(30분) 후에 타임아웃 되게 설정되어 있음.
- Last Accessed time은 Http Request가 올때마다 계속 초기화 되므로 합리적인 정책이라 보여짐.
- 세션은 메모리를 사용하므로 타임아웃 설정이 안되어있거나 너무 길게 설정되어 있으면 장애가 날 수 있음.