본문 바로가기

Java&JSP&Spring/JSP&Servlet

[JAVA/JSP/Servlet]JSP세션

[JAVA/JSP/Servlet]JSP세션

안녕하세요 미나라이입니다.

이번에는 JSP에서 세션을 사용하는 방법에 대해서 알아보려고 합니다.

프로젝트 환경

OS : Windows 10

IDE : Eclipse 2020-06 (4.16.0)

Java : 8

Jdk Version : 1.8.0_161

WAS : Tomcat 8.5.73

 

이전 쿠키 포스팅에 이어서 이번에는 세션에 대해서 간단하게 정리해보려고 하는데요

세션은 로그인 회원 정보 등을 유지하는 목적으로 많이 이용됩니다.

세션의 특징

세션은 최대로 담을 수 있는 용량의 제한이 없습니다.

서버의 환경에 따라서 과부하가 될 수 있다는 점은 있습니다.

세션의 생성 및 저장

세션은 쿠키와 같이 웹 서버에서 생성되지만 저장은 웹서버상의 객체로 저장 합니다.

JSP를 통해서만 접근이 가능하고 그렇기 때문에 보안상으로 안전합니다.

세션 사용 방법

세션 초기화

JSP에서는 기본적으로 세션을 바로 사용 가능한 상태로 되어있습니다.

세션을 사용하지 않는 상태로 하려면 page속성에서 아래처럼 설정해주면 됩니다.

디폴트는 true로 되어있기 때문에 false로 지정하지 않을 경우에는 page속성 및 세션 강제 생성을 하지 않아도 됩니다.

대신 변수명은 session고정이 됩니다.

// 세션 초기화를 false로 지정
<%@ page session="false" %>

// 세션 강제 생성
HttpSession session = request.getSession();

세션 에 값 넣기

세션 안에 값을 넣기 위해서는 setAttribute속성을 사용합니다.

session.setAttribute(세션키값 , 세션에 넣고싶은 값) 형식으로 넣어주시면 됩니다.

session.setAttribute("mySession", "mySessionData");
session.setAttribute("myNum", 12345);

세션에 넣은 값 빼서 사용하기

세션 안에 넣은 값을 빼서 사용하고싶을때는 getAttribute속성을 사용합니다.

session.getAttibute(세션키값)을 해서 값을 취득합니다.

이 때 데이터 타입은 기본 Object타입이기 때문에 취득한 값에 따라서 형변환을 해 주어야 합니다.

Object obj1 = session.getAttribute("mySession");
String mySession = (String)obj1;
Object obj2 = session.getAttribute("myNum");
Integer myNum = (Integer)obj2;

세션에 넣은 값 전부 확인하기

세션에 넣은 값을 전부 확인하기 위해서는 getAttributeNames속성을 사용합니다.

이때 세션의 이름을 취득하기 위해서 Enumeration기능을 사용해야 합니다.

Enumeration enumeration = session.getAttributeNames();
while(enumeration.hasMoreElements()) {
    // 세션의 키값(이름 취득)
    String sName = enumeration.nextElement().toString();
    // 세션의 해당 키에 대한 값 취득하기
    String sValue = session.getAttribute(sName).toString();
}

세션의 유지 시간 설정

세션의 유지시간 설정은 두군데에서 가능합니다.

 

1. WAS설정 변경

세션의 유지시간은 WAS(톰캣 등)에 저장됩니다.

WAS상의 모든 세션 시간을 바꾸려고 하면 WAS설치파일의 web.xml파일 안을 수정해주면 됩니다.

중간에<session-timeout>속성이 있는데 이부분을 고치면 됩니다.

여기는 분단위로 설정하기 때문에 40이면 2400초로 표시되어 나옵니다.

2. setMaxInactiveInterval속성 사용

setMaxInactiveInterval속성으로 세션의 최대 유지시간을 설정 할 수 있습니다.

여기서는 초단위 설정이 필요하므로 40분을 유지하고싶다면 2400으로 설정 해 주어야 합니다.

session.setMaxInactiveInterval(2400);

 

두가지 방법을 동시에 했을 경우에는 2번 설정을 기준으로 적용됩니다.

세션의 고유 ID확인

세션의 고유ID를 확인하고 싶은 경우 getId속성을 이용합니다.

브라우저별 고유 아이디가 붙기 때문에 유저 식별용으로 사용되는 경우도 있습니다.

기본 문자형 타입으로 반환됩니다.

String sessionId = session.getId();

세션의 속성 삭제

세션의 속성 삭제는 removeAttribute속성을 사용합니다.

session.removeAttribute(세션키값) 형식으로 작성하면 됩니다.

// 해당 세션의 값 삭제
session.removeAttribute("mySession");

세션 전체 삭제

세션을 전체적으로 삭제하고 싶을 경우에는 invalidate속성을 사용합니다.

해당 기능을 쓰면 session에 저장된 모든 데이터가 삭제가 됩니다.

모든 데이터가 삭제되었는지 확인하고 싶을 경우에는 request.isRequestedSessionIdValid속성을 사용합니다.

// 세션 전체 삭제
session.invalidate();

// 세션 삭제 유무 확인
if(request.isRequestedSessionIdValid() == true) {
    out.println("session valid");
}
else {
    out.println("session invalid>");
}

세션이 새것인지 기존에 만들어진것인지 확인

세션이 새로 만들어졌는지 기존 세션을 가져온 것인지 확인하는 방법은

isNew속성을 사용합니다.

if(session.isNew()) {
    out.println("sessionIsNew");
}
else {
    out.println("sessionIsOld");
}

Servlet에서 세션 가져오기 및 초기화 하기

JSP파일에서는 session이 디폴트로 true이기 때문에 바로 사용이 가능하지만 servlet에서는 강제 생성을 해 주어야 합니다.

강제 생성 방법은 request.getSession속성을 이용하는 방법이 있습니다.

여기서 getSession뒤에 true/false값을 넣을 수 있는데 이것은 기존의 세션이 있는지 확인하고

기존의 세션이 존재하면 세션값을 가져오고 세션이 존재하지 않았을 때 true일 경우에는 세션을 초기화 하고

false일 경우에는 세션을 null로 리턴시킵니다.

// 세션이없고 false일 경우에는 null반환
HttpSession session = request.getSession(false);

 

다음 포스팅에서는 JSP세션을 이용한 간단한 로그인 로그아웃 예제를 작성 해 보겠습니다.

찾아보니 괜찮게 정리한 포스팅이 많이 보이더군요..

728x90
반응형