본문 바로가기

JSP

[JSP] 세션 (Session)

 

세션(Session)

클라이언트와 서버의 연결을 유지시켜주는 역할을 수행한다. http 프로토콜은 요청과 응답이 이루어지면 연결이 해제가 되고 연결을 계속 유지할 시 서버 과부하가 걸릴 수 있다. 따라서 기존 정보를 계속 유지할 방법이 필요하게 되고 세션 기술을 통하여 요청과 응답이 이루어지고 나면 해당 정보를 저장한다.

세션은 웹 브라우저를 거치지 않고 웹 서버에 있는 데이터 영역을 통해 데이터를 전달하는 방법을 사용한다. 첫 번째 웹 컴포넌트가 웹 서버 쪽에 데이터를 저장해 놓고 그 데이터를 읽기 위해 필요한 세션 아이디만 웹 브라우저로 보내며 웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로 보낸다.


서블릿 클래스에서 세션 기술을 사용하는 방법

서블릿 클래스에서 세션을 시작하기 위해서는 doGet, doPost 메서드의 HttpServletRequest 파라미터에 대해 getSession 메서드를 호출해야 한다. 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의 객체를 리턴한다.

HttpSession session = request.getSession();

 

getSession 메서드가 리턴한 HttpSession 객체에 대해 setAttribute 라는 메서드를 호출하면 세션 데이터 영역에 데이터를 저장할 수 있다. setAttribute 메서드는 같은 이름의 데이터가 있으면 기존 값을 지우고 새로운 값을 저장하므로 데이터 수정 기능을 구현하기 위해서도 사용할 수 있다.

session.setAttribute("ID", "chaeng");

 

HttpSession 객체에 대해 getAttribute 메서드를 호출하면 세션 데이터 영역의 데이터를 가져올 수 있다. 메서드는 데이터 이름을 파라미터로 받고, 그에 해당하는 데이터 값을 리턴한다. 리턴 타입은 Object 이므로 데이터 값을 본래의 타입으로 사용하려면 캐스팅이 필요하다.

String str = (String)session.getAttribute("ID");

 

HttpSession 객체를 이용하면 세션 데이터를 삭제할 수 있는데 이때 removeAttribute 메서드를 호출해서 할 수 있다.

session.removeAttribute("ID");

 

세션을 이용해서 할 일을 모두 마치고 나면 invalidate 메서드를 호출해서 세션을 끝낼 수 있다.

session.invalidate();


 

JSP 페이지에서 세션 사용하는 방법

서블릿 클래스에서 새로운 세션을 시작하거나 진행 중인 세션을 계속하기 위해 getSession 메서드를 호출해야 한다.

JSP 페이지에서는 JSP 페이지가 서블릿 클래스로 변환될 때 메서드를 호출하는 코드가 자동으로 추가 되기 때문에 getSession 메서드를 호출할 필요가 없다.

Session 내장변수를 사용하면 세션 데이터 영역에 데이터를 저장할 수도 있고 영역에 있는 데이터를 읽어오거나 삭제할 수도 있다.

session.setAttribute("ID", "chaeng");    세션 데이터를 저장

String str = (String) session.getAttribute("ID");    세션 데이터를 가저옴

session.removeAttribute("ID");     세션 데이터를 삭제

session.invalidate();     세션을 끝냄

 

세션에서 웹 브라우저로 세션 아이디를 보낼 때 쿠키 형태로 만들어서 전송하고 있는데 이 쿠키 이름은 JSESSIONID이다.


 

세션을 이용한 예시 코드