본문 바로가기
뒤끝 (Back-End)

[JSP] 세션

728x90

세션 : 클라이언트의 요청에 따라 접속된 웹 서버와 가상으로 연결된 상태를 유지하도록 함

  • 세션은 서버공간에서 생성되므로 보안 유지에 유리하지만 데이터를 저장하기 위한 한계성에 대한 문제는 존재

클라이언트와 웹 서버 간의 접속을 통해 생성된 세션

  • 웹 서버 공간에 생성되는 객체로 웹 브라우저마다 하나씩 존재
  • 네트워크 환경에서 여러 사용자 중 특정인에 대한 구분자의 역할 수행
  • 세션을 통해 접속된 웹 브라우저를 닫기 전까지는 사용자 정보를 지속적으로 활용 가능


session 내장 객체 : 웹 브라우저에서 웹 서버에게 서비스를 요청할 경우, 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 역할, page 지시문 session 속성 true로 설정

 

 

setAttribut() 메소드 : 세션을 생성할 때 사용

session.setAttribute("사용할 세션의 이름", 세션의 속성 값);
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 세션 생성 </title>
</head>
<body>
	Home > 세션 생성하기
	<hr>
	<%
		String u_id = request.getParameter("id");
		String u_pw = request.getParameter("passwd");
		
		if(u_id.equals("space") && u_pw.equals("123456"))
		{
			session.setAttribute("memberId", u_id);
			session.setAttribute("memberPw", u_pw);
			
			out.println("새로운 세션 생성 성공 ! <br>");
			out.println("[ " + (String) session.getAttribute("memberId") 
			+ "(" + 
			(String) session.getAttribute("memberPw") 
			+ ") ]님이 입장하였습니다. ");
		}
		else
		{
			out.println("세션 생성 실패 ! <br>");
			out.println("다시 시도해 보세요.");
		}
	%>
</body>
</html>

getAttribute() 메소드 : 세션에 저장된 하나의 세션 속성 이름에 대한 속성을 가져옴

  • Object형이므로 반드시 강제 형변환 필요
  • name 매개변수 선언하지 않으면 null 값 반환
String u_id = (String)session.getAttribute("memberId");

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 단일 세션 정보  </title>
</head>
<body>
	Home > 단일 세션 정보 확인하기
	<hr>
	<%
		String u_id = (String) session.getAttribute("memberId");
		String u_pw = (String) session.getAttribute("memberPw");
		
		out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
		out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>");
	%>
</body>
</html>


getAttributeNames() 메소드 : 세션에 저장된 여러 개의 세션 속성 이름에 대한 속성을 가져옴

  • Enumeration 객체 타입이므로 page 지시문 태그의 import 속성을 사용하여 java.util.Enumeration 을
    설정해야 함
<%@ page import="java.util.Enumeration" %>
Enumeration en = session.getAttributeNames();
<%@ 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> 모든 세션 정보  </title>
</head>
<body>
	Home > 모든 세션 정보 확인하기
	<hr>
	<%
		String name = "";
		String value = "";
		
		Enumeration en = session.getAttributeNames();
		
		int count=0;
		while(en.hasMoreElements())
		{
			count++;
			name = en.nextElement().toString();
			value = session.getAttribute(name).toString();
			
			out.println(count + ". 세션의 속성 이름 : [ " + name + " ] <br>");
			out.println(count + ". 세션의 속성값 : [ " + value + " ] <br>");
		}
	%>
</body>
</html>


setMaxInactiveInterval() 메소드 : 세션의 유효시간을 설정할 때 사용

  • 초단위, 기본값은 1,800초(30분)
  • 세션의 유효시간이 0 or 음수 값일때 : 유효시간이 없는 상태임, 세션을 삭제 후에도 웹 서버에는 계속해서 남아있게 되어 메모리 부족 현상이 발생할 수 있음
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 세션의 유효시간  </title>
</head>
<body>
	Home > 세션의 유효시간 출력하기
	<hr>
	-- 세션 유효시간 변경 전 -- <br>
	<%
		int s_time = session.getMaxInactiveInterval() / 60;
		out.println("세션의 유효시간 : [ " + s_time + " 분 ] <br><br>");
	%>
	-- 세션 유효시간 변경 후 -- <br>
	<%
		session.setMaxInactiveInterval(60 * 5);
		s_time = session.getMaxInactiveInterval() / 60;
		out.println("세션의 유효시간 : [ " + s_time + " 분 ]");
	%>	
</body>
</html>


getId() : 세션 아이디 가져오기

getLastAccessedTime() : 세션에 접근한 마지막 시간

getCreationTime() : 세션에 접근한 최초의 시간

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 로그인 접속 후 세션 유지 시간  </title>
</head>
<body>
	Home > 로그인 접속 후 세션을 유지한 시간 출력하기
	<hr>
	<%
		String session_id = session.getId();	// 세션 ID
		long last_time = session.getLastAccessedTime();	// 세션에 접근한 마지막 시간, 밀리세컨드
		long start_time = session.getCreationTime();	// 세션에 접근한 최초의 시간, 1000ms = 1초
		long keping_time = (last_time - start_time) / 60000;	// 세션에 생성된 시간(분)
		
		out.println("1. 세션 아이디 : [ " + session_id + " ] <br>");
		out.println("2. 세션이 생성된 시간 : [ " + keping_time + " 분 ] <br>");
	%>	
</body>
</html>

removeAttribute() 메소드 : 단일 세션을 삭제할 때 사용

session.removeAttribute("삭제할 세션");
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 단일 세션 삭제  </title>
</head>
<body>
	Home > 단일 세션 삭제하기
	<hr>
	-- 단일 세션 삭제 전 -- <br>
	<%
		String u_id = (String) session.getAttribute("memberId");
		String u_pw = (String) session.getAttribute("memberPw");
		out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
		out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br><br>");

		session.removeAttribute("memberId");	 // 세션 "memberId" 삭제
	%>
	-- 단일 세션 삭제 후 -- <br>
	<%
		u_id = (String) session.getAttribute("memberId");
		u_pw = (String) session.getAttribute("memberPw");
		out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");	// null 출력
		out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>");	// "123456" 출력
	%>
</body>
</html>


inalidate() 메소드 : 다중 세션을 삭제할 때 사용

session.invalidate()
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 다중 세션 삭제  </title>
</head>
<body>
	Home > 다중 세션 삭제하기
	<hr>
	-- 다중 세션 삭제 전 -- <br>
	<%
		String u_id = (String) session.getAttribute("memberId");
		String u_pw = (String) session.getAttribute("memberPw");
		out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
		out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>");
		
		if(request.isRequestedSessionIdValid() == true)
		{
			out.println(" >> 유효한 세션입니다. <br><br>");
		}
		else
		{
			out.println(" >> 유효하지 않은 세션입니다.<br><br>");
		}

		session.invalidate();	// 모든 세션 삭제
	%>
	-- 다중 세션 삭제 후 -- <br>
	<%
		if(request.isRequestedSessionIdValid() == true)
		{
			out.println(" >> 삭제 후에도 유효한 세션입니다.<br><br>");
		}
		else
		{
			out.println(" >> 삭제되어 유효하지 않은 세션입니다.");
		}
	%>
</body>
</html>

728x90

'뒤끝 (Back-End)' 카테고리의 다른 글

[JSP] JDBC  (0) 2024.12.04
[JSP] 데이터베이스  (2) 2024.12.04
[JSP] 액션 태그  (0) 2024.10.18
[JSP] request 내장 객체  (5) 2024.10.16
[JSP] 폼 태그  (3) 2024.10.14