파게로그

상태유지를 위한 Application, Session, Cookie 본문

콤퓨타 왕기초/JSP

상태유지를 위한 Application, Session, Cookie

파게 2020. 12. 17. 18:08

상태 유지를 위해서는 다음의 5가지 방법을 이용할 수 있다.

  • application
  • session
  • cookie
  • hidden input
  • query string

 

Application 객체를 통한 상태유지

사용범위: 전역범위에서 사용하는 저장공간

생명주기: WAS가 시작해서 종료될 때까지

저장위치: WAS 서버의 메모리

 

Servlet Context

Servlet의 결과물을 저장해두는 등, 자원 공유의 저장소로서 상태 저장 공간의 역할을 수행한다. 이것이 Web Application에서는 application 저장소라고도 불린다. 데이터를 set하거나 get하는 방법은 마치 map의 그것과 유사하다.

ServletContext application = request.getServletContext();

// set data
application.setAttribute("attribute", value);

// get data
application.getAttribute("attribute"); // return Object

 

Session 객체를 통한 상태유지

사용범위: 세션 범위

생명주기: 세션이 시작해서 종료될 때까지

저장위치: WAS 서버의 메모리

 

사용하는 방법은 Application 객체와 유사하다.

HttpSession session = request.getSession();

// set data
session.setAttribute("attribute", value);

// get data
session.getAttribute("attribute"); // return Object

 

그렇다면 언제 Application을 이용하고 언제 Session을 이용할까?

  • Application은 application 전역에서 이용 가능하다.
  • Session은 session 범주에서만 이용 가능하다.

 

그렇다면 WAS는 어떻게 session(사용자)을 구분할까?

  • 사용자의 요청이 처음 온다. 이 때 SID는 없기에, Session은 사용할 수 없는 공간이다.
  • response에서 SID를 부여한다. 이 때 Session의 공간도 생성된다.
  • 그 다음 요청부터는 SID가 함께 들어온다.
  • 브라우저가 닫힐 때까지 SID는 살아있다.

 

 

Headers > Cookie의 JSESSIONID = ...를 통해서 SID를 확인할 수 있다.

 

관련 메소드는 다음과 같다.

void invalidate()
// 세션에서 사용되는 객체들을 바로 해제한다. 세션 저장소 비우기

void setMaxInactiveInterval(int interval)
// 세션 타임아웃 설정(기본은 30분이고 WAS 설정에 따름)

boolean isNew()
// 세션이 새로 생성되었는지 확인

long getCreationTime()
// 세션 시작 시간(ms. 1970/1/1 기준)

long getLastAccessed()
// 마지막 요청 시간(ms)

 

Cookie 객체를 통한 상태유지

사용범위: 웹 브라우저별 지정한 path 범주 공간

생명주기: 웹 브라우저에 전달한 시간부터 만료시간까지

저장위치: 웹 브라우저의 메모리 또는 파일

 

Application이나 Session과는 달리 Cookie 객체는 데이터를 서버가 아니라 클라이언트가 저장한다.

// 쿠키 저장하기
Cookie cookie = new Cookie("name", String.valueOf(number));
response.addCookie(cookie);

// 쿠키 사용하기
Cookie[] cookies = request.getCookies();
String c = "";
if (cookies != null)
    for (Cookie cookie : cookies)
        if ("name".equals(cookie.getName()))
            c = cookie.getValue();

 

쿠키의 전달은 response header와 request header에서 확인할 수 있다.

 

Cookie의 path 옵션

쿠키는 모든 페이지마다 동일하지 않을 수 있다. 오히려, Servlet마다 쿠키가 따로 있어야 한다. 동일한 쿠키 이름 사용이나 네트워크 부하 방지 등을 위해서다.

cookie.setPath("");
cookie.setPath("/"); // 어떤 페이지를 요청해도 쿠키를 가져옴
cookie.setPath("/notice/");
response.addCookie(cookie);

 

Cookie의 maxAge 옵션

쿠키의 생존주기는 기본적으로 브라우저의 생존주기와 같다. 하지만 쿠키의 기간을 별도로 설정할 수 있다.

cookie.setMaxAge(60*100); // 초 단위

 

Cookie 지우기

쿠키의 maxAge를 0으로 설정함으로써 쿠키를 지우는 것과 동일한 효과를 낼 수 있다.

cookie.setMaxAge(0);
response.addCookie(cookie);

 

'콤퓨타 왕기초 > JSP' 카테고리의 다른 글

동적인 페이지 출력을 위한 원시적인 방법  (0) 2020.12.18
redirect  (0) 2020.12.17
URI와 URL, URN  (0) 2020.12.14
POST 요청  (0) 2020.12.09
GET 요청과 쿼리 스트링  (0) 2020.12.09
Comments