본문 바로가기
Spring/Java

[java/자바] Session 세션 사용 방법

by snow_hong 2023. 4. 17.

Session은 클라이언트 별로 서버에 저장되는 정보이다.

쿠키는 사용자의 컴퓨터에 저장되지만 Session(세션)은 서버에 저장되므로, 안이 필요한 데이터는 쿠키보다 세션에 저장하는 것이 안전하다.

세션은 서버가 종료되거나 유효시간이 지나면 사라진다.

 

1. 세션 개념 

웹 클라이언트가 서버에게 요청을 보내면 서버는 클라이언트를 식별하는 session id를 생성한다.
서버는 session id로 key와 value를 저장하는 HttpSession을 생성하고, session id를 저장하고 있는 쿠키를 생성하여 클라이언트에게 전송한다.
클라이언트는 서버 측에 요청을 보낼 때, session id를 가지고 있는 쿠키를 전송한다.
서버는 쿠키의 session id로 HttpSession을 찾는다.

 

2. 세션 사용방법 

import javax.servlet.http.HttpSession; 라이브러리 사용

 

세션 생성 및 가져오기
getSession(boolean)
인수 default : ture

getSession() 메서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 새 세션을 생성하여 반환한다.

파라미터로 false를 전달하면, 이미 생성된 세션이 있을 때 그 세션을 반환하고, 없으면 null을 반환한다.

import javax.servlet.http.HttpSession;

HttpSession session = request.getSession();
HttpSession session = request.getSession(true);
HttpSession session = request.getSession(false);

 

세션 값 저장
setAttribute(String name, Object value)

setAttribute는 name, value 쌍으로 객체 Object를 저장하는 메서드다.

세션이 유지되는 동안 저장된다.

HttpSession session = request.getSession();

session.setAttribute(이름, 값)

 

 

세션 값 조회
getAttribute(String name)
리턴 타입 : Object

getAttribute 메서드로 세션에 저장된 값을 조회가능

리턴 타입은 Object이므로 형변환이 필요하다.

메서드 setAttribute에 이용한 name을 알고 있으면 다음과 같이 조회할 수 있다.

 

String name = (String)session.getAttribute("name");

 

세션 값 삭제
removeAttribute(String name) : name 값에 해당하는 세션 정보 삭제
invalidate() : 모든 세션 정보 삭제

invalidate(); 매소드의 경우  로그아웃로직에서 많이 사용한다.

 

// 세션에서 일부 값 삭제하기
session.removeAttribute("name");

// 모든세션 정보 삭제하기
session.invalidate();

 

세션 유지 시간 설정
web.xml 파일 수정 or setMaxInactiveInterval()

기본적으로 세션은 30분 유지된다.

세션 유지 시간은 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간을 말한다.

30분이상 서버에 전혀 반응을 보이지 않으면, 세션이 자동으로 끊어진다.

이 세션 유지 시간은 web.xml 파일에서 설정할 수 있다.

or

개별적으로 설정할 경우에는 session.setMaxInactiveInterval(시간인수)을 통해서 설정할 수 있습니다.

무한대로 설정을 원한다면 시간인수로 -1을 설정해 주시면 됩니다. 

//web.xml 수정
<session-config>
  <session-timeout>30</session-timeout>
</session-config>

//개별 설정(초단위)
//60*60 = 1시간
session.setMaxInactiveInterval(60*60);

// 무한대설정
session.setMaxInactiveInterval(-1);

 

3. 예제 

@GetMapping("/test/session")
public String JavasessionTest(Model model, HttpServletRequest request) {

    // 세션생성
    HttpSession session = request.getSession();
    HttpSession session1 = request.getSession(true);
    HttpSession session2 = request.getSession(false);

    // 새로운세션 생성여부
    boolean sNew = session.isNew();

    // 세션 유지시간 설정(초단위로)
    // 60*60 = 1시간
    int sTime = 60*60; 
    session.setMaxInactiveInterval(sTime);

    // 무한대설정
    //session.setMaxInactiveInterval(-1);

    // 세션Id 값 가져오기
    String sId = session.getId();

    String hello = "Hello session test!!";

    // 세션에 값 저장하기
    session.setAttribute("session_hello", hello);

    // 세션에서 값 가져오기
    String word = (String) session.getAttribute("session_hello"); 

    // 세션에서 일부 값 삭제하기
    session.removeAttribute("session_hello");

    // 모든세션 정보 삭제하기
    session.invalidate();

    return null;	
}

 

 


[ 참고 및 출처 ] 

https://itworldyo.tistory.com/188

https://byul91oh.tistory.com/227

728x90

댓글