Search
Duplicate
moon
sun

세션 (Session)

세션 (Session)

세션이란? (session)

: 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

세션을 사용하는 주요 기능

사용자 인증 및 로그인 관리
장바구니 및 주문 처리

세션 생명 주기

세션은 클라이언트가 사이트에 접속한 순간부터 브라우저를 종료하는 시점까지 유지됩니다.
로그인 정보는 세션에 등록되기 때문에 로그인 후 브라우저의 모든 탭을 종료하고 다시 사이트에 접속하면 로그아웃이 되어 있는 것을 볼 수 있습니다.
크롬 브라우저의 경우, 새 시크릿 창을 열면 별도의 새로운 세션으로 테스트 해볼 수 있습니다. (… > 새 시크릿 창 (Ctrl + Shift + N)
1.
생성 (Creation) : 클라이언트가 웹 애플리케이션에 최초로 접속하면, 서버는 해당 클라이언트를 위한 새로운 세션을 생성합니다. 이때 고유한 세션 식별자(ID)가 생성되고, 이 ID를 사용하여 세션을 식별합니다.
2.
활성화 (Activation) : 세션이 생성되면 활성 상태가 되며, 클라이언트와 서버 간의 데이터 교환을 허용합니다. 클라이언트가 웹 애플리케이션에 요청을 보낼 때마다 세션은 활성화 상태를 유지합니다.
3.
비활성화 (Inactivation) : 세션은 일정 시간 동안 활성화 상태를 유지한 후, 클라이언트의 요청이 없을 경우 비활성화 상태로 전환됩니다. 이때, 세션은 메모리에서 해제되지 않고, 재활성화될 때까지 대기합니다.
4.
종료 (Expiration) : 세션이 만료되면 종료됩니다. 만료는 두 가지 방법으로 발생할 수 있습니다. 첫 번째 방법은 세션을 만든 웹 애플리케이션의 설정에 지정된 시간(세션 타임아웃)이 경과한 경우입니다. 두 번째 방법은 세션을 프로그래밍적으로 무효화(invalidate)하는 경우입니다.
5.
강제 종료 (Forced Termination) : 웹 애플리케이션 개발자나 관리자가 필요한 경우 세션을 직접 무효화할 수 있습니다. 이로 인해 세션은 즉시 종료되며, 클라이언트는 다시 세션을 생성해야 합니다.

세션 내장 객체의 주요 메소드

메소드
설명
getAttribute(String name)
세션에서 특정 속성의 값을 가져옵니다.
setAttribute(String name, Object value)
세션에 새로운 속성을 설정하거나 기존 속성의 값을 업데이트합니다.
removeAttribute(String name)
세션에서 특정 속성을 제거합니다.
getId()
현재 세션의 고유한 식별자(ID)를 반환합니다.
setMaxInactiveInterval(int interval)
세션의 비활성 시간 제한을 설정합니다.
getMaxInactiveInterval()
세션의 비활성 시간 제한을 반환합니다.
invalidate()
현재 세션을 무효화시키고 세션의 모든 속성과 데이터를 삭제합니다.
isNew()
현재 세션이 새로 생성되었는지 여부를 확인합니다.
getCreationTime()
세션이 생성된 시간을 반환합니다.
getLastAccessedTime()
세션에 마지막으로 액세스한 시간을 반환합니다.

세션 생성

session.setAttribute("userId", userId);
Java
복사

세션 정보

단일 세션 정보
session.getAttribute("userId");
Java
복사
다중 세션 정보
Enumeration en = session.getAttributeNames(); int i = 0; while (en.hasMoreElements()) { i++; name = en.nextElement().toString(); // 세션 속성이름 가져오기 value = session.getAttribute(name).toString(); // 세션 속성값 가져오기 out.println("설정된 세션의 속성 이름 [ " + i + " ] : " + name + "<br>"); out.println("설정된 세션의 속성 값 [ " + i + " ] : " + value + "<br>"); out.println("----------------------------------------------<br>"); }
Java
복사

세션 삭제

단일 세션 삭제
session.removeAttribute("userId");
Java
복사
다중 세션 삭제
session.invalidate();
Java
복사
세션 유효 여부 확인
// isRequestedSessionIdValid // : 해당 요청이 속한 session 이 유효한지 여부를 반환하는 메소드 if (request.isRequestedSessionIdValid() ) { out.print("세션이 유효합니다."); } else { out.print("세션이 유효하지 않습니다."); }
Java
복사

세션 유효 시간

세션 유효시간 확인
// getMaxInactiveInterval() // : 세션의 유효시간을 반환하는 메소드 int time = session.getMaxInactiveInterval() / 60; out.println("세션 유효 시간 : " + time + "분<br>");
Java
복사
세션 유효시간 설정
// setMaxInactiveInterval() // : 초 단위로 세션의 유효시간을 설정하는 메소드 session.setMaxInactiveInterval(60 * 60); // 유효시간 60 분으로 설정
Java
복사

세션 정보 등록하기

session01.jsp
session01_pro.jsp
session01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>세션</title> </head> <body> <h1>세션</h1> <form action="session01_pro.jsp" method="post"> <p>아이디 : <input type="text" name="username"/></p> <p>비밀번호 : <input type="password" name="password"/></p> <p> <input type="submit" value="로그인" /> </p> </form> </body> </html>
HTML
복사
session01_pro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>세션 로그인</title> </head> <body> <!-- 세션 등록하는 과정 --> <% String username = request.getParameter("username"); String password = request.getParameter("password"); if( username.equals("joeun") && password.equals("123456") ) { // 아이디, 비번 일치 -> 인증(로그인) 성공 // -> 세션에 사용자 정보 등록 session.setAttribute("username", username); session.setAttribute("password", password); out.println("세션 설정 성공! (로그인 성공)"); out.println(username + "님 환영합니다."); } else { out.println("세션 설정 실패! (로그인 실패)"); } %> <a href="<%= request.getContextPath() %>/session02.jsp">session02.jsp</a> </body> </html>
Java
복사

세션 정보 가져오기

session02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>세션 정보 가져오기</title> </head> <body> <h1>세션 정보 가져오기</h1> <% String username = (String) session.getAttribute("username"); String password = (String) session.getAttribute("password"); out.println("세션 정보 - username : " + username); out.println("세션 정보 - password : " + password); %> <div> <a href="<%= request.getContextPath() %>/session03.jsp">session03.jsp</a> </div> </body> </html>
HTML
복사