개발_기타/미분류

세션 (Session)

zuyo 2021. 1. 20. 22:51
반응형

비연결지향형인 HTTP 프로토콜은 응답 후에 연결을 지속하지 않으며, 기존의 정보 또한 저장하지 않는다.

이런 부분을 보완하기 위하여 쿠키(Cookie)와 세션(Session)을 이용할 수 있다.

주로 로그인이나 장바구니와 같이 사용자의 정보를 저장해두는데 사용된다.

 

세션은 쿠키와 달리 서버(Server)에 데이터를 저장하고 관리한다.

 

보안, 부하 등의 이유로 꼭 사용해야만 하는 곳에만 쓰는 것을 권장하며 세션에 DTO 객체를 통째로 넣거나, 이것저것 다 넣는건 지양한다. 은행 사이트 같은 곳에선 5분 정도 지나면 위와 같은 이유로 자동으로 세션을 종료시킨다.

 

1. 세션에 데이터 넣기

세션 값을 설정하기 위해서는 HttpSession.setAttribute(String key, Object value) 메소드를 사용한다. 

 

여기서 key는 String 형으로 지정하지만, 값은 Object 형으로 지정하기 때문에 일반적으로 많이 사용하는 String 뿐만 아니라, 프로그램에서 사용하고 있던 객체(Object)를 세션으로 설정할 수도 있다.

@RequestMapping("/login.do")
public String login(String id, String password, HttpServletRequest request) {
	// 세션 요청
	HttpSession session = request.getSession();
	session.setAttribute("id", id);
	// ...

 

2. 세션에서 데이터 가져오기

JSP 웹 페이지에서 세션 값을 가져오기 위해서는 HttpSession.getAttribute(String key) 메소드를 사용한다. 

 

여기서 주의해야 할 점으로는 세션의 값이 Object 형으로 저장되기 때문에 반환되는 데이터의 형도 동일하게 Object 형이된다.

 

따라서, 리턴 받고자 하는 데이터형으로 다운 캐스팅을 해 주어야 한다.

@RequestMapping("/")
public ModelAndView index(HttpServletRequest request) {
	String id = null;
	// 세션에서 데이터 가져오기
	HttpSession session = request.getSession();
 	id = (String)session.getAttribute("id");
	// ...

 

3. 세션 해제하기

세션의 속성값들이 자동적으로 상실된다. HttpSession.invalidate() 메소드 사용.

@RequestMapping("/logout.do")
public String logout(HttpServletRequest request) {
	// 세션 해제
	HttpSession session = request.getSession();
	session.invalidate();
	// ...

 

4. 세션 유지시간 지정하기

세션 유지시간동안 아무 요청이 없으면 세션이 만료된다. 클라이언트에서 요청이 발생하면 다시 시간이 갱신된다.

 

별도로 지정하지 않으면 세션 유지시간은 WAS의 기본 설정값으로 지정된다.

 

1) 코드 상에서 유지시간 지정

session.setMaxInactiveInterval(1800); // sec

2) web.xml에 유지시간 지정

<session-config>
    <!-- minute -->
    <session-timeout>30</session-timeout>
</session-config>

 

 

앞에서 살펴본 session 객체는 javax.servlet.http.HttpSession 인터페이스로 구현되어 있으며, setAttribute() 와 getAttribute() 외에더 다음과 같은 여러 가지의 메소드를 제공하고 있다.

public void removeAttribute(String key)
// 세션중에서 key에 해당하는 값을 제거한다.

public Enumeration getAttributeNames()
// 세션으로 설정되어 있는 모든 키를 java.util.* 에 포함되어 있는 Enumberation 형태로 가져온다.
// 따라서, 이 메소드를 사용하기 위해서는 page 지시부에 java.util.*를 import! 한 후 사용해야 한다.

public String getId()
// 세션이 열리면 각 세션에 대해서 고유한 ID가 할당되는데, 이 아이디를 문자열로 리턴한다.

public long getCreationTime()
// 세션이 처음 생성된 시간을 밀리 초로 계산하여 long형 정수로 리턴하며,
// 기준은 70년1월1일 00시 00분 00초이다.

public long getLastAccessedTime()
// 세션에 클라이언트가 마지막으로 request를 보낸 시간을 long 형으로 리턴한다.

public int getMaxInactiveInterval()
// 클라이언트의 요구가 없을 때 서버가 현재의 세션을 언제까지 유지할지를 정수로 리턴하며,
// 디폴트로는 30분으로 지정되어 있다.

public boolean isNew()
// 서버측에서 새로운 session객체를 생성하고
// 아직 클라이언트에게 세션ID를 할당하지 않은 경우 true를 리턴하고
// 기존의 세션이 유지되고 있는 상태라면 false를 리턴한다.
반응형