IT•개발 끄적/개발

[개발][Java] session 사용 방법 및 예제(자바 세션)

소다맛사탕 2021. 12. 26. 15:50
반응형

안녕하세요. 소다맛사탕 입니다.

지난 포스팅 '[개발] 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