자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)
JAVA/JSP 17. 세션(Session) - 세션이란, 세션 설정/확인/삭제
개발학생
2023. 11. 22. 22:03
반응형
1. 세션이란
- 클라이언트가 웹 브라우저를 통해 서버에 접속한 후 용무를 처리하고 웹 브라우저를 닫아 서버와의 접속을 종료하는 하나의 단위
- 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적
→ 대표적으로 ‘로그인’ 정보 유지에 쓰임 - HTTP 요청은 독립적이기에 여러 요청에 걸친 복잡한 기능을 구현하려면 별도 기술이 필요함→ 그 중 다른 하나인 세션은, 서버가 직접 관리하므로 민감한 정보를 다루기에 더 적합함
→ 그 중 하나가 쿠키(Cookie)지만, 정보를 클라이언트에 저장한 후 네트워크로 주고받기에 민감한 정보를 다루기엔 위험함 - ‘내장 객체의 영역’ 중 하나
2. 세션 설정/확인/삭제
1) 세션 유지 시간 설정
- 세션은 웹 브라우저 실행 시 마다 새롭게 생성되는데, 설정된 유지 시간 동안 유지되고, 유지 시간이 만료되기 전에 새 요청이 들어오면 수명이 계속 연장됨
→ 세션 유지 시간 만료 때까지, 클라이언트가 아무런 요청을 하지 않거나 웹 브라우저를 닫으면 삭제됨
(1) /WEB-INF/web.xml파일을 수정해서 설정
- 유지 시간을 ‘분’ 단위로 설정함
- /WEB-INF/web.xml파일에 코드 추가 (유지 시간을 20분으로 설정한 것)
// WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi= ... 생략 ...>
... 생략 ...
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
(2) JSP 파일에서 session 내장 객체가 제공하는 setMaxInactiveInterval()을 사용해서 설정
- 유지 시간을 ‘초’ 단위로 설정함
// 유지 시간 30분(=1800초)으로 설정하기
<%
session.setMaxInactiveInterval(1800);
%>
2) 세션 설정값 확인
- SessionMain.jsp 파일 생성 후 코드 작성
// WebContent/SessionMain.jsp
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //1. 날짜 표시 형식
//2. (아래 코드 4줄)
long creationTime = session.getCreationTime(); // 최초 요청(세션 생성) 시각
String creationTimeStr = dateFormat.format(new Date(creationTime));
long lastTime = session.getLastAccessedTime(); // 마지막 요청 시각
String lastTimeStr = dateFormat.format(new Date(lastTime));
%>
<html>
<head><title>Session</title></head>
<body>
<h2>Session 설정 확인</h2>
<ul>
<li>세션 유지 시간 : <%= session.getMaxInactiveInterval() %></li> //3.
<li>세션 아이디 : <%= session.getId() %></li> //4.
//5.(아래 코드 2줄)
<li>최초 요청 시각 : <%= creationTimeStr %></li>
<li>마지막 요청 시각 : <%= lastTimeStr %></li>
</ul>
</body>
</html>
- SimpleDateFormat 클래스를 활용해 날짜 표시 형식을 ‘시:분:초’ 형태로 지정
- 세션의 최초 요청 시각(=세션 생성 시각)과 마지막 요청 시간을 구해서, 1.의 형식에 맞는 문자열로 바꿔 줌
- 현재 세션 설정값 확인1 - web.xml에서 설정한 세션 유지 시간을 출력
- 현재 세션 설정값 확인2 - 웹 브라우저에 생성된 세션 ID 출력 (웹 브라우저 새롭게 열 때마다 다른 값으로 설정됨)
- 현재 세션 설정값 확인3 - 2.에서 구한 세션의 최초 요청 시각과 마지막 요청 시각을 출력
- 웹 브라우저를 완전히 닫은 후, SessionMain.jsp 파일을 실행한 결과
- SessionMain.jsp 파일을 실행한 브라우저에서, 잠시 후 F5키를 눌러 새로고침한 결과(’마지막 요청 시각’이 변함)
3) 세션 삭제
- 웹 브라우저를 닫지 않고도, 웹 브라우저 설정에서 모든 쿠키를 삭제해서 세션을 삭제하는 방법도 있음
- 크롬 브라우저 → [설정] → [개인정보 및 보안-인터넷 사용 기록 삭제] → 기간은 ‘지난 1시간’, [쿠키 및 기타 사이트 데이터] 체크박스 ‘체크
- 앞에서 만들었던 CookieMain.jsp 파일을 실행하고, ‘쿠키 설정 직후 쿠키값 확인하기’ 아래를 확인하면, 우리가 생성한 적이 없는 쿠키명인 ‘JSESSIONID’가 출력됨
→ 요청을 보낸 웹 브라우저가 현재 연결되어 있는지(세션이 살아 있는지) 확인하기 위해 JSESSIONID를 이용
→ 톰캣 컨테이너에서 새로운 웹 브라우저가 접속하면, 세션을 유지하기 위해 자동으로 생성해 줌
*세션 삭제 동작 방식
- 웹 브라우저가 전달한 JSESSIONID를 통해, 서버는 세션 영역(HttpSession과 같은)에 상태를 유지해야 하는 값들을 저장할 수 있게 됨
→ 웹 브라우저에서 모든 쿠키를 삭제하면 JSESSIONID까지 사라지므로 서버가 새로운 세션을 생성함 (로그인 상태였더라도 로그아웃 처리가 됨)
- 웹 브라우저가 처음 접속하면, 서버(톰캣)는 세션을 새로 생성함
- 서버에서 웹 브라우저의 요청에 응답할 때, 세션 아이디를 값으로 갖는 JSESSIONID 쿠키를 Response Header(응답 헤더)에 담아 웹 브라우저에 보냄
- 웹 브라우저는 재요청 시마다 JSESSIONID를 Request Header(요청 헤더)에 추가해서 보냄
- 요청 헤더에 포함된 JSSIONID를 통해, 서버는 해당 요청이 기존 세션에서 이어진 것임을 알게 됨
2. 세션 설정/확인/삭제
반응형