# 세션 트래킹
- 웹 페이지 사용 시, 사용자는 기본적으로는 첫 로그인을 하게되면 각각의 페이지에서 따로 로그인할 필요가 없다.
- 사용자는 보통 각각의 웹 화면이 사용자의 로그인 정보를 자동적으로 알고있다고 생각하지만
- HTTP 방식으로 동작하는 웹 페이지들은 서로 로그인등의 특정 정보를 공유하지 않는다.
- 웹 페이지간의 상태나 정보를 공유하기위해서는 개발자가 세션 트래킹이라는 웹 페이지 연결 기능을 구현해야한다.
사용 방식
(1) hidden 태그
- HTML의 HIDDEN 태그를 사용하여 웹 페이지 간의 정보 공유
(2) URL Rewriting
- Get 방식의 Url로 파라미터를 붙여 웹 페이지 간 정보 공유
- location.href 태그 사용
(3) 쿠키
- 클라이언트 PC의 쿠키 파일에 정보를 저장한 후 웹 페이지간 공유
- 보안에 취약하므로 중요한 정보에는 사용하지 않으며 팝업창 등의 일주일간 보여주지 않음 등의 기능에 사용한다.
- 쿠키 경로는 C:\Users\사용자명칭\AppData\Local\Google\Chrome\User Data\Default\Cache\Cache_Data 이다.
(3.1) 쿠키 특징
특징 |
정보가 클라이언트 PC에 저장된다. |
저장 정보 용량에 제한이 있다. (파일의 경우 4KB) |
보안에 취약하다. |
클라이언트 브라우저에서 사용 유무를 설정할 수 있다. |
도메인 (웹 사이트) 당 하나의 쿠키가 생성된다. |
(3.2) 쿠키 종류
속성 | Persistence 쿠키 | Session 쿠키 |
생성 위치 | 파일로 생성 | 브라우저 메모리에 생성 |
종료 시기 | 쿠키를 삭제하거나 설정 값이 종료된 경우 | 브라우저를 종료한 경우 |
최초 접속 시 전송 여부 | 최초 접속 시 서버로 전송 O | 최초 접속 시 서버로 전송 X |
용도 | 로그인 유무 또는 팝업 창 제한 | 사이트 접속 시 Session 인증 정보 유지 |
(3.3) 쿠키 생성 과정
생성 과정 |
# 최초 접속 시, (1) 브라우저로 사이트에 접속 (2) 서버에서 정보를 저장한 쿠키 생성 (3) 생성된 쿠키를 브라우저로 전송 (4) 전송받은 쿠키 정보를 브라우저에서 쿠키 파일에 저장 # 재 접속 시, (5) 브라우저가 다시 접속하여 서버가 브라우저에게 쿠키 요청 시, 브라우저에서 쿠키 정보를 전송 (6) 서버에서 쿠키 정보를 통하여 작업 진행 |
(3.4) 쿠키 관련 API
- javax.servlet.http.Cookie 를 사용한다.
- HttpServletResponse의 addCookie 메소드로 클라이언트 브라우저에 쿠키를 전송한 뒤 저장한다.
- HttpServletRequest의 getCookie 메소드로 쿠키를 서버에서 가져온다.
- setMaxAge 메소드에 양수 값으로 지정하면 Persistence 형태, 지정하지 않으면 Session 형태의 쿠키가 생성된다.
# 쿠키 객체 생성
Cookie c = new Cookie("쿠키 명칭", URLEncoder.encode("한글 사용 시","utf-8"));
# 쿠키 브라우저 전송
response.addCookie(c);
# 요청 쿠키 정보 가져오기
Cookie [] arr = request.getCookies();
메소드 | 특징 |
set / getComment | 쿠키의 설명을 지정한다. / 가져온다. |
set / getDomain | 쿠키의 유효한 도메인 정보를 지정한다. / 가져온다. |
set / getMaxAge | 쿠키의 유효기간을 지정한다. / 가져온다. |
set / getPath | 쿠키의 디렉토리 정보를 지정한다. / 가져온다. |
set / getValue | 쿠키의 값을 지정한다. / 가져온다. |
set / getName | 쿠키 명칭을 가져온다. |
[참고] 웹 브라우저에서 사용하고 있는 쿠키는 F12에서 확인 가능하다.
(4) 세션
- 서버 메모리에 정보를 저장한 후 웹 페이지 간 공유
- 아래의 특징이 있어 로그인 등의 중요 정보 관리에 용이하다.
(4.1) 세션 특징
특징 |
정보가 서버 메모리에 저장되므로 쿠키보다 보안성에서 유리하다. |
브라우저의 세션 연동은 세션 쿠키를 사용한다. |
서버에 부하를 줄 수도 있다. |
브라우저 (사용자) 당 하나의 세션 (SESSION ID) 이 생성된다. |
세션은 유효기간을 가진다. (기본값 30분) |
(4.2) 세션 생성 과정
생성 과정 |
# 최초 접속 시, (1) 브라우저로 사이트 접속 (2) 서버에서 접속한 브라우저에 대한 세션 객체 생성 (3) 서버는 생성된 ID값을 클라이언트 브라우저에 응답 (전송) 한다. (4) 브라우저에서 세션 ID값을 기준으로 세션 쿠키에 저장 (쿠키 명칭, JSESSION_ID) # 재 접속 시, (5) 브라우저에서 서버로 세션 쿠키에 저장된 ID (jsessionId) 를 다시 서버로 전송 (6) 서버에서 전송받은 세션ID 값을 사용하여 브라우저의 세션 객체에 접근하여 브라우저에대한 작업 수행 |
(4.3) API
- 서블릿에서 세션 사용 시, HttpSession 클래스 객체를 생성하여 사용해야 한다.
- HttpSession 객체는 HttpServletRequest 의 getSession() 메소드를 호출하여 사용할 수 있다.
GETSESSION 메소드 | |
getSession() / getSession(true) | 기존의 세션 객체가 존재하면 반환하고 없으면 새로 생성한다. |
getSession(false) | 기존의 세션 객체가 존재하면 반환하고 없으면 NULL을 반환한다. |
반환 타입 | 메소드 | 설명 |
Object | getAttribute() | NAME기준 속성 값에 해당하는 세션을 가져온다. |
int | getMaxInactiveInterval() | 세션 유지 시간의 값을 가져온다. |
void | removeAttribute(String name) | NAME기준 속성 값에 해당하는 세션을 제거한다. |
void | setAttribute(String name, Object value) | NAME기준 속성 값에 해당하는 세션에 값을 할당한다. |
void | setMaxInactiveInterval(int inerval) | 세션을 유지하기 위한 세션 유지시간을 지정한다. |
'Web > Etc' 카테고리의 다른 글
[Etc] 서버 & 클라이언트 (0) | 2025.01.10 |
---|---|
[Etc] Mime-Type (0) | 2025.01.09 |
[Etc] Servlet Context (0) | 2025.01.09 |
[Etc] 디버깅 (0) | 2025.01.09 |
[Etc] Context (0) | 2025.01.09 |