세션은 클라이언트의 상태 정보를 서버 측에 저장할 수 있다.
쿠키는 정보를 클라이언트에 저장한 후 네트워크로 주고받기 때문에 민감한 정보를 다루기엔 위험하다.
한편 세션은 서버가 직접 관리하므로 민감한 정보를 다루기에 더 적합하다.
세션이란?
세션은 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적이다.
유지 시간 설정
세션은 웹 브라우저를 실행할 때마다 새롭게 생성된다.
이렇게 생성 된 세션은 설정된 유지 시간 동안 유지되며, 유지 시간이 만료되기 전에 새로운 요청이 들어오면 수명이 계속 연장된다. 그리고 만료 때까지 클라이언트가 아무런 요청을 하지 않거나 웹 브라우저를 닫으면 삭제된다.
세션의 유지 시간을 설정하는 방법은 두 가지가 있다.
1. /WEB0INF/web.xml에서 설정하기
<?cml servion="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=...생략...>
...생략...
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
web.xml에서는 유지시간을 분 단위로 설정한다.
2. setMaxInactiveInterval()로 설정하기
setMaxInactiveInterval()은 JSP 파일에서 session 내장 객체가 제공한다.
<%
session.setMaxInactiveInterval(1800);
%>
web.xml과 달리 이 메서드의 시간 단위는 초이다.
따라서 이 코드는 1800초, 즉 30분으로 설정되어 있는 것이다.
두 가지 설정은 방법만 다를 뿐 동일하게 적용된다.
설정값 확인
세션의 속성에는 유지 시간과 다른 세션과 구분하기 위한 아이디, 최초 요청 시각(생성 시간), 마지막 요청 시각 등이 있다.
메서드 | 기능 |
session.getCreationTime() | 최초 요청(세션 생성) 시각 반환 |
session.getLastAccessTime() | 마지막 요청 시각 반환 |
session.getId() | 세션 ID 반환 |
만약 쿠키값을 확인한다면 개발자가 설정한 쿠키 이외에 JSESSIONID라는 쿠키가 존재할 것이다.
JSESSIONID는 우리가 생성한 적이 없지만 톰캣 컨테이너에서 새로운 웹 브라우저가 접속하면 세션을 유지하기 위해 자동으로 생성해 주는 쿠키이다.
JSESSIONID의 동작 방식
- 웹 브라우저가 처음 접속하면 서버(톰캣)는 세션을 새로 생성한다. 그리고 응답 시 세션 아이디를 값으로 갖는 JESSIONID 쿠키를 응답 헤더에 담아 웹 브라우저에 보낸다.
- 웹 브라우저는 재요청 시마다 JSESSIONID를 요청 헤더에 추가하여 보낸다.
- 서버는 요청 헤더에 포함된 JSESSIONID를 해당 요청이 기존 세션에서 이어진 것임을 알게 된다.
즉, 웹 브라우저로부터 전달받은 JSESSIONID를 통해 서버는 세션 영역에 상태를 유지해야 하는 값들을 저장할 수 있게 되는것이다.
세션 삭제
앞서 세션은 웹 브라우저를 닫으면 종료된다고 했다.
그렇지만 웹 브라우저를 닫지 않고도, 웹 브라우저 설정에서 모든 쿠키를 삭제해 세션을 삭제하는 방법도 있다.
쿠키 vs 세션
쿠키 | 세션 | |
저장 위치/형식 | 클라이언트 PC에 text로 저장 | 웹 서버에 Object 타입으로 저장 |
보안 | 클라이언트에 저장되므로 보안에 취약 | 서버에 저장되므로 보안에 안전 |
자원/속도 | 서버 자원을 사용하지 않으므로 세션보다 빠름 | 서버 자원을 사용하므로 쿠키보다 느림 |
용량 | 용량의 제한이 있다. | 서버가 허용하는 한 제한이 없다. |
유지 시간 | 쿠키 생성 시 설정한다. 단, 설정된 시간이 경과되면 무조건 삭제된다. | 서버의 web.xml에서 설정한다. 설정된 시간 내라도 동작이 있다면 삭제되지 않고 유지된다. |
표에서 보듯 쿠키는 정보가 클라이언트에 기록되기 때문에 보안 측면에서는 안전하지 않다.
웹 브라우저의 개발자 도구를 이용해 값을 변경할 수 있고, 변경한 값을 전송할 수 있다.
또한 개인정보 무단사용 방지 차원에서 웹 브라우저에는 쿠키를 거부할 수 있는 설정이 있다. 이 설정이 되어 있다면 쿠키를 이용한 로그인과 같은 기능을 사용할 수 없게 된다.
이에 반해 세션은 서버에 저장되므로 보안에 안전하다. 그러므로 개인정보와 같은 민감한 정보라도 저장하는데 문제가 없다. 웹 브라우저가 종료되면 세션도 같이 삭제되므로 로그아웃 유무와 상관없이 기존 세션은 소멸되고, 접속 시 새로운 세션이 생성 된다.
핵심 요약
쿠키와 세션은 JSP에서는 클라이언트의 상태 정보를 저장하는 방법이다.
- 쿠키는 상태 정보를 클라이언트 PC에 저장한다.
- 세션은 서버에 저장한다.
이러한 특성 때문에 보안 측면에서 크게 중요하지 않은 경우 쿠키를, 보안이 중요한 정보는 세션을 사용하여 저장한다.
- 세션은 클라이언트가 웹 브라우저를 통해 서버에 접속한 후 웹 브라우저를 닫을 때까지의 단위를 뜻한다.
- 클라이언트가 서버에 접속한 동안 상태를 유지하기 위해 세션 영역을 이용해 상태 정보를 저장한다.
- 세션의 유지 시간 설정은 web.xml을 이용하는 것이 편리하다.
- 설정된 유지 시간 동안 아무런 동작이 없다면 세션은 소멸된다. 하지만 동작이 있는 한 계속 유지된다.
- 세션 영역은 다른 페이지와도 공유되므로 클라이언트별 상태 정보를 관리하기에 아주 유용한 수단이다.
'🤓천재교육 풀스택 1기 노트' 카테고리의 다른 글
JSP 쿠키 (0) | 2023.08.01 |
---|---|
JSP 지시어와 스크립트 요소 (0) | 2023.07.30 |
JSP 기본 (0) | 2023.07.30 |
천재교육 풀스택1기 과정 JSP Section1. 서블릿, 자바 웹 기술의 새 지평을 열다. (3) | 2023.07.28 |
천재교육 풀스택과정 1기 DAY17 (0) | 2023.06.05 |