[개발][Java] session 사용 방법 및 예제(자바 세션)
안녕하세요. 소다맛사탕 입니다.
지난 포스팅 '[개발] session과 cookie 차이점과 사용용도.'에서 session의 사용 방법과 예제를 알아보겠습니다.
자바 라이브러리 제공
javax.servlet.http.HttpSession
https://mvnrepository.com/artifact/javax.servlet/servlet-api/2.5
Maven 프로젝트 pom.xml dependency 선언 확인
HttpSession 인터페이스를 들여다보면...
1. HttpSession 인터페이스
interface method | 설명 |
getCreationTime | 세션이 생성된 시간을 밀리초 단위로 반환. |
getId | 세션에 할당된 고유 식별자 반환. |
getLastAccessedTime | 클라이언트가 세션과의 마지막으로 요청된 시간을 반환. |
getServletContext | 세션이 속한 서블릿 컨텍스트 반환. |
setMaxInactiveInterval | 클라이언트가 세션을 무효화 하기까지의 시간을 설정.(초단위) |
getMaxInactiveInterval | 클라이언트가 세션을 무효화 하기까지의 시간을 반환.(초단위) |
getAttribute | 세션에 셋팅된 Object 반환.(주로 String) |
getAttributeNames | Enumeration의 String이 세션에 셋팅된 Object로 반환.(주로 배열 또는 String) |
setAttribute | 세션에 Object 셋팅.(지정된 이름으로 바인딩) |
removeAttribute | 세션에 바인딩된 개체 제거 |
invalidate | 세션 무효화.(세션 즉시 제거) |
2. 사용 방법과 예제
// session에 아이디와 비밀번호를 생성.
session.setAttribute("lastestUsrId", "test1234");
session.setAttribute("lastestUsrPw", "abcd1234!@#$");
// session 유지 시간을 설정.(초단위)
// 무한대로 설정시 -1
session.setMaxInactiveInterval(30);
// session 바인딩 된 값 호출
System.out.println("==== 세션 생성 시간 ====");
System.out.println(session.getCreationTime());
System.out.println("==== 세션 고유값 ====");
System.out.println(session.getId());
System.out.println("==== 세션 최근 저장 id, pw 호출 ====");
System.out.println("id : "+ session.getAttribute("lastestUsrId"));
System.out.println("pw : "+ session.getAttribute("lastestUsrPw"));
System.out.println("===========");
System.out.println("==== 세션에 저장된 pw 삭제 후 확인 ====");
session.removeAttribute("lastestUsrPw");
System.out.println("id : "+ session.getAttribute("lastestUsrId"));
System.out.println("pw : "+ session.getAttribute("lastestUsrPw"));
// 세션 즉시 삭제
session.invalidate();
// System.out.println("==== 세션 삭제 후 생성 시간 ====");
// java.lang.IllegalStateException: getCreationTime: Session already invalidated
//System.out.println(session.getCreationTime());
System.out.println("==== 세션 삭제 후 고유값 ====");
System.out.println(session.getId());
// System.out.println("==== 세션 삭제 후 id, pw 호출 ====");
// java.lang.IllegalStateException: getAttribute: Session already invalidated
// System.out.println("id : "+ session.getAttribute("lastestUsrId"));
// System.out.println("pw : "+ session.getAttribute("lastestUsrPw"));
---- 결과 ----
==== 세션 생성 시간 ====
1640500478414
==== 세션 고유값 ====
85CAB91F07459FD4DBCC5FEDD2098D0B
==== 세션 최근 저장 id, pw 호출 ====
id : test1234
pw : abcd1234!@#$
===========
==== 세션에 저장된 pw 삭제 후 확인 ====
id : test1234
pw : null
==== 세션 삭제 후 고유값 ====
85CAB91F07459FD4DBCC5FEDD2098D0B
테스트 결과
세션 유지 시간을 설정했다 하더라도,
세션을 즉시 삭제하게 되면 기본적으로 셋팅된 세션 값들은 모두 초기화 됩니다.
그리고 session 삭제된 이후 세션 생성시간과 특정 session 파라미터를 호출하게 되면
java.lang.IllegalStateException: getCreationTime: Session already invalidated
java.lang.IllegalStateException: getAttribute: Session already invalidated와 같은
세션이 이미 삭제되었다는 오류 문구가 찍힙니다.
그리고 위와 같이
세션의 시간을 30초로 설정하였다 해서 웹의 전체 세션이 유지되는게 아니고,
해당 세션 시간을 설정해서 호출한 method의 특정 세션(화면)만 설정되는 것입니다.
※ 예시를 만들고자 패스워드에 관련된걸 적었을 뿐이지, 직접적으로 패스워드를 세션에 담는 코딩은 지양해 주세요.
참조 : https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html