JSP/서블릿 흝어 보기

세션(Session)

세션이란?

세션은 쿠키와 다르게 사용자의 정보가 서버에 저장된다. 세션을 클라이언트마다 개별적으로 유지하기 위해 HttpSession 객체가 생성될때 요청을 보내온 클라리언트 정보, 요청시간 정보 등을 조합한 세션ID가 부여되며, 이 세션ID가 쿠키 기술로 저장된다.

언제 사용하는가?

인증 또는 로그인 정보를 유지하거나 웹 애플리케이션 이용에 필요한 로그인한 사용자의 정보를 안전하게 서버에 보관할 때 사용된다. 그러나 세션ID가 클라이언트 측의 쿠키에 저장되므로 악의적인 해커가 XSS기법을 이용해 이 세션ID를 탈취(하이잭킹)하여 이 탈취한 세션ID를 이용해 나 아닌 해커가 해당 사이트에 부정하게 로그인하거나 권한을 획득할 수 있어 안전하다고는 할 수 없다.

이를 위한 보완 방법으로는 사용자 아이피와 사용환경을 체크하거나 세션의 유효기간을 설정하기도 한다.

세션 생성와 객체 삭제

세션 생성을 생성하기 위해서는 HttpServletRequest 객체의 getSession() 메소드를 이용한다. getSession( ) 메소드는 클라이언트가 가지고 있는 세션 ID와 동일한 세션 객체를 찾아서 주솟값을 반환한다.

HttpSession session = null;

session = req.getSession();

// isNew( ) 메소드는 getSession( )에서 반환 받은 세션객체가 
// 새로 생성된 객체인지 기존의 세션 객체가 반환된 것인지 판단합니다.
if(session.isNew()) 
{
    msg = "새로운 객체가 생성됨";
}else{
    msg = "기존의 세션 객체가 리턴됨";
}

이와 다르게 오버로딩 메소드인 getSession(boolean create) 메소드 세션을 생성할때 만일 세션이 존재하지 않으면, 매개변수 create 값이 true인지 false인지에 따라 다르게 동작합니다. 

true일때, 세션 객체가 존재하지 않을 경우 새로운 HttpSession 객체를 생성하여 반환합니다. 

session = req.getSession(true);
//세션 객체에 "msg"라는 이름의 세션 데이터를 얻어옵니다.
session.setAttribute("msg","메시지입니다.");
msg = "세션 객체에 데이터 등록 완료";

false일때, 세션 객체가 존재하지 않을 경우 새로운 HttpSession 객체를 생성하지 않고 null을 반환한다.

session = req.getSession(false);
if(session == null) 
{
    msg = "삭제할 세션 존재하지 않음";
}else{
    // 세션객체의 invalidate( ) 메소드는 현재의 세션을 삭제한다.
    session.invalidate()
    msg = "세션 객체 삭제 작업 완료";
}

세션 데이터 추출와 삭제

session = req.getSession(false);

if(session == null) 
{
        msg = "데이터를 추가하거나 삭제할 세션 객체가 존재하지 않음";
}else{
	// 세션에서 msg 이름의 데이터 추출
	msg = session.getAttribute("msg");	
	// 세션에서 msg 이름의 데이터를 삭제
	session.removeAttribute("msg");
	
}	

 

※ 책(p224)에서 세션을 이용하여 로그인/로그아웃 기능을 구현한 예제가 있다.

댓글

댓글 본문
  1. DongHyun Kim
    제보 감사합니다.! 수정했습니다.
    대화보기
    • 성민
      오타 발견!
      세션 생성와 객체 삭제
      false일때, 세션 객체가 존재하지 않을 경우 새로운 HttpSession 객체를 생성하지 않고 null을 반환한다.
      8번 줄에서 삭제 작업이 삭업 작업이라고 표기되어있네요.