JSP

JSP 웹 프로그래밍 - 세션 (세션의 개요, 생성, 정보, 삭제, 유효 시간 설정)

록's 2023. 3. 7. 15:46
728x90
반응형

1. 세션의 개요

 

세션(session)

  • 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
    • 예를 들면 웹 쇼핑몰에서 장바구니나 주문 처리와 같은 회원 전용 페이지의 경우 로그인 인증을 통해 사용 권한을 부여
    • 다른 웹 페이지에 갔다가 되돌아와도 로그인 상태가 유지되므로 회원 전용 페이지를 계속 사용할 수 있음
    • 이렇게 사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것
  • 웹 서버에서만 접근이 가능하므로 보안 유지에 유리하며 데이터를 저장하는 데 한계가 없음
  • 오직 웹 서버에 존재하는 객체로 웹 브라우저마다 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 됨
  • 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음

 

 

 

 

2. 세션 생성

 

 

세션 생성

  • session 내장 객체의 setAttribute( ) 메소드를 사용
  • setAttribute( ) 메소드를 이용하여 세션의 속성을 설정하면 계속 세션 상태를 유지할 수 있음
  • 만약 동일한 세션의 속성 이름으로 세션을 생성하면 마지막에 설정한 것이 세션 속성 값이 됨
 
  • 첫 번째 매개변수 name은 세션으로 사용할 세션 속성 이름을 나타내며, 세션에 저장된 특정 값을 찾아오기 위한 키로 사용
  • 두 번째 매개변수 value는 세션의 속성 값
    • 세션 속성 값은 Object 객체 타입만 가능하기 때문에 int, double, char 등의 기본 타입은 사용할 수 없음

 

 

 

세션 생성하기

// session01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<form action="session01_process.jsp" method="POST">
		<p> 아 이 디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="text" name="passwd">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>
// session01_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<%
		String user_id = request.getParameter("id");
		String user_pw = request.getParameter("passwd");
		
		if(user_id.equals("admin") && user_pw.equals("1234")) {
			session.setAttribute("userID", user_id);
			session.setAttribute("userPW", user_pw);
			out.println("세션 설정이 성공했습니다<br>");
			out.println(user_id + "님 환영합니다.");
		} else {
			out.println("세션 설정이 실패했습니다.");
		}
	%>
</body>
</html>

- 출력 화면 -

 

 

 

 

3. 세션 정보

 

단일 세션 정보 얻기

  • 세션에 저장된 하나의 세션 속성 이름에 대한 속성 값을 얻어오려면 getAttribute( ) 메소드를 사용
  • getAttribute( ) 메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함

  • 첫 번째 매개변수 name은 세션에 저장된 세션 속성 이름
  • 해당 속성 이름이 없는 경우 null을 반환

 

 

 

 

세션에 저장된 속성 값 가져와 출력하기

// session02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<%
		String user_id = (String) session.getAttribute("userID");
		String user_pw = (String) session.getAttribute("userPW");
		
		out.println("설정된 세션의 속성 값[1]" + user_id + "<br>");
		out.println("설정된 세션의 속성 값[2]" + user_pw);		
	%>
</body>
</html>

- 출력 -

 

 

 

 

다중 세션 정보 얻기

 

 

 

세션에 저장된 모든 세션 속성 이름과 속성 값 가져와 출력하기

// session03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<%
		String name;
		String value;
		
		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>");
		}
	%>
</body>
</html>

- 출력 -

 

 

 

 

 

 

4. 세션 삭제

 

단일 세션 삭제하기

  • 세션에 저장된 하나의 세션 속성 이름을 삭제하려면 removeAttribute( ) 메소드를 사용

 

 

세션에 저장된 세션 속성 삭제하기1

// session04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h4>--- 세션을 삭제하기 전 ---</h4>
	<%
		String user_id = (String) session.getAttribute("userID");
		String user_pw = (String) session.getAttribute("userPW");
		out.println("설정된 세션 이름 userID : " + user_id + "<br>");
		out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
		
		session.removeAttribute("userID");
	%>
	
	<h4> --- 세션을 삭제한 후 --- </h4>
	<%
		user_id = (String) session.getAttribute("userID");
		user_pw = (String) session.getAttribute("userPW");
		out.println("설정된 세션 이름 userID : " + user_id + "<br>");
		out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
	%>
</body>
</html>

 

 

세션에 저장된 세션 속성 삭제하기2

// session05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h4>--- 세션을 삭제하기 전 ---</h4>
	<%
		String name;
		String value;
		
		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>");
		}
		
		session.removeAttribute("userID");
	%>
	
	<h4> --- 세션을 삭제한 후 --- </h4>
	<%
		en = session.getAttributeNames();
	
		i = 0;
		while (en.hasMoreElements()) {
			i++;
			name = en.nextElement().toString();
			value = session.getAttribute(name).toString();			
			out.println("설정된 세션 이름 userID : " + name + "<br>");
			out.println("설정된 세션 값 userPW : " + value + "<br>");
		}
	
	%>
</body>
</html>

-출력-

 

 

 

다중 세션 삭제하기

  • 세션에 저장된 모든 세션 속성 이름을 삭제하려면 invalidate( ) 메소드를 사용

 

 

 

세션에 저장된 모든 세션 속성 삭제하기

// session.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h4>--- 세션을 삭제하기 전 ---</h4>
	<%
		String user_id = (String) session.getAttribute("userID");
		String user_pw = (String) session.getAttribute("userPW");
		
		out.println("설정된 세션 이름 userID : " + user_id + "<br>");
		out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
		
		if (request.isRequestedSessionIdValid() == true) {
			out.print("세션이 유효합니다.");
		} else {
			out.print("세션이 유효하지 않습니다.");
		}
		
		session.invalidate();
		%>
		
		<h4> --- 세션을 삭제한 후 --- </h4>
		<%
			if (request.isRequestedSessionIdValid() == true) {
				out.print("세션이 유효합니다.");
			} else {
				out.print("세션이 유효하지 않습니다.");
			}
		%>		
</body>
</html>

- 출력 -

 

 

 

 

 

 

5. 세션 유효 시간 설정

 

세션 유효 시간

  • 세션을 유지하기 위한 세션의 일정 시간
  • 웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료
  • 세션 유효 시간을 설정하기 위해 session 내장 객체의 setMaxInactiveInterval
    ( ) 메소드를 사용

 

 

 

세션 유효 시간을 가져와 출력하기

// session07.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h4>--- 세션 유효 시간 변경 전 ---</h4>
	<%
		int time = session.getMaxInactiveInterval() / 60;
	
		out.println("세션 유효 시간 : " + time + "분<br>");
	%>
	<h4>--- 세션 유효 시간 변경 후 ---</h4>
	<%
		session.setMaxInactiveInterval(60 * 60);
		time = session.getMaxInactiveInterval() / 60;
		
		out.println("세션 유효 시간 : " + time + "분<br>");
	%>
</body>
</html>

-출력-

 

 

 

세션 아이디와 웹 사이트에서 유지한 시간 출력하기

// session08.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<%
		String session_id = session.getId();
	
		long last_time = session.getLastAccessedTime();
		
		long start_time = session.getCreationTime();
		
		long used_time = (last_time - start_time) / 60000;
		
		out.println("세션 아이디 : " + session_id + "<br>");
		out.println("요청 시작 시간 : " + start_time + "<br>");
		out.println("요청 마지막 시간 : " + last_time + "<br>");
		out.println("웹 사이트의 경과 시간 : " + used_time + "<br>");
	%>
</body>
</html>

- 출력 -

 

728x90
반응형