반응형

 

세션

 

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

웹 서버에서만 접근 가능 => 보안 유지에 좋음 + 데이터 저장의 한계가 없음

ex) 로그인

 

 

웹 서버에 존재하는 객체(세션)로 웹 브라우저마다 하나씩 존재한다. => 웹 서버의 서비스를 제공 받는 사용자를 구분하는 단위가 됨

웹 브라우저를 닫기 전까지 사용자 정보가 웹 서버에 보관되어 있음

 

 

 

  • session 내장 객체 메소드의 종류
메소드 반환 유형 설명
getAttribute(String name) java.lang.Object 세션 속성 이름이 name인 값을 반환
Object 형으로 반환되기에 형 변환 필수
getAttributeNames() java.util.Enumeration 세션 속성 이름을 Enumeration 객체 타입으로 반환
getCreation Time() long 세션 생성 시간 반환
1970년 1월 1일 0시 0초부터 현재 경과한 시간을 반환
getId() java.lang.String 세션에 할당된 고유 아이디를 String 형태로 반환
getLastAccessedTime() long 클라이언트가 마지막으로 request를 보낸 시간 반환
getMaxInactiveInterval(int interval) int 세션을 유지하기 위해 세션 유지 시간 반환
기본값 : 1800초(30분)
inNew() boolean 세션 생성 여부 반환
처음 생성된 세션 : true, 이전에 생성된 세션 : false
removeAttribute(String name) void name인 속성 제거
setAttribute(String name, Object value) void name 속성에 value 할당
setMaxInactiveInterval(int interval) void 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정
Invalidate()   세션에 저장된 모든 속성 제거

 

 

 

세션 내장 객체 예시

 

 

 

  • setAttribute() : 세션 생성

session01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session 내장 객체</title>
</head>
<body>
	<!-- 아이디, 비밀번호, submit버튼(전송) 
	요청URI : session01_process.jsp
	요청파라미터 : {id=admin&passwd=java}
	요청방식 : post
	 -->
	<form action="session01_process.jsp" method="post">
		<p>아이디 : <input type="text" name="id" placeholder="아이디" required></p>
		<p>비밀번호 : <input type="text" name="passwd" placeholder="비밀번호" required></p>
		<p><input type="submit" value="전송"></p>
	</form>
</body>
</html>

 

 

session01_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
	<!-- 아이디, 비밀번호, submit버튼(전송) 
	요청URI : session01_process.jsp
	요청파라미터 : {id=admin&passwd=java}
	요청방식 : post
	 -->
	 
	<%//스크립틀릿
		String user_id = request.getParameter("id");
		String user_pw = request.getParameter("passwd");
		
		//JSP에는 session 기본 내장 객체가 있음(scope는 session영역)
		//session객체의 속성명인 userID에 매핑하여 user_id변수의 값을 입력
		if(user_id.equals("admin") && user_pw.equals("java")) {		
			session.setAttribute("userID", user_id); //admin
			session.setAttribute("userPW", user_pw); //java
			
			//request 기본 객체의 getSession()메소드를 사용하여 session객체 생성 가능
// 	        HttpSession httpSession = request.getSession();
// 	        httpSession.setAttribute("userID", user_id);   //admin
// 	        httpSession.setAttribute("userPW", user_pw);   //java
	        
			out.print("세션 설정 성공<br />");
			out.print(user_id + "님 환영합니다.");
		}else{
		   out.print("세션 설정 실패!");
		}
   %>
</body>
</html>

 

결과 화면1-1

 

결과 화면1-2

 

 

 

  • getAttribute() : 단일 세션 정보 얻기

session02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
	<%//스클립틀릿
      /*
         session.setAttribute("userID", user_id);   //admin
         session.setAttribute("userPW", user_pw);   //java
      */
      //Object하위의 String 형으로 다운캐스팅
      String user_id = (String)session.getAttribute("userID"); //admin
      String user_pw = (String)session.getAttribute("userPW"); //java
      
      out.print("설정된 세션의 속성 값[1] : " + user_id + "<br />");
      out.print("설정된 세션의 속성 값[2] : " + user_pw + "<br />");
   %>
</body>
</html>

 

결과 화면2 : setAttribute를 하지 않을 시 null로 뜸

 

 

 

  • getAttributeNames() : 다중 세션 정보 얻기

session03.jsp

<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
	<%//스크립틀릿
      //session.setAttribute(이름, 값)
      //session.setAttribute("userID", user_id);   //admin
      //session.setAttribute("userPW", user_pw);   //java
      String name; String value;
      int i = 0;
      
      Enumeration en = session.getAttributeNames(); //userID, userPW 열거형
      
      //세션 속성 이름이 있을때까지 반복
      //en.hasMoreElements() : fetch
      while(en.hasMoreElements()){   //2회 반복
         name = en.nextElement().toString();   //userID 다음에는 userPW
         value = session.getAttribute(name).toString();   //session.getAttribute("userId")
         
         out.print("설정된 세션 속성 명 [" + i + "] : " + name + "<br />");
         out.print("설정된 세션 속성 값 [" + i + "] : " + value + "<br />");
         
         out.print("<hr />");
      }
   %>
</body>
</html>

 

결과 화면3

 

 

 

  • removeAttribute() : 단일 세션 삭제하기

session04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
	<!-- session01.jsp와 session01_process.jsp를 먼저 수행 후 -->
	<!-- 
      session.setAttribute("userID", user_id);   //admin
      session.setAttribute("userPW", user_pw);   //java
    -->
    <!-- P.430 -->
    <h4>-----세션 삭제 전-----</h4>
    <%//스크립틀릿
       String user_id = (String)session.getAttribute("userID");   //admin
       String user_pw = (String)session.getAttribute("userPW");   //java
       out.print("설정된 세션 이름 userID : " + user_id + "<br />");   //admin
       out.print("설정된 세션 이름 userPW : " + user_pw + "<br />");   //java
       //잘 안씀
       session.removeAttribute("userID");
       session.removeAttribute("userPW");
    %>
    <h4>-----세션 삭제 후-----</h4>
    <%//스크립틀릿
       user_id = (String)session.getAttribute("userID");   //null
       user_pw = (String)session.getAttribute("userPW");   //java
       out.print("설정된 세션 이름 userID : " + user_id + "<br />");   //null
       out.print("설정된 세션 이름 userPW : " + user_pw + "<br />");   //java
    %>
</body>
</html>

 

결과 화면4

 

 

 

  • getSession(), isRequestedSessionIdValid(), invalidate() : 다중 세션 삭제하기

session06.jsp

<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
	<!-- session01.jsp와 session01_process.jsp를 먼저 수행 후 -->
	<!-- 
      session.setAttribute("userID", user_id);   //admin
      session.setAttribute("userPW", user_pw);   //java
    -->
   <%
   HttpSession session2 = request.getSession();
   Enumeration en = session2.getAttributeNames();
   
   while(en.hasMoreElements()) {
	   String name = (String)en.nextElement();
	   String value = (String)session2.getAttribute(name);
	   out.print("<p>name : " + name + ", value : " + value + "</p>");
   }
   %>
   <h4>-----세션을 삭제하기 전-----</h4>
   <%//스크립틀릿
      String user_id = (String)session.getAttribute("userID");   //admin
      String user_pw = (String)session.getAttribute("userPW");   //java
      
      //request객체에 포함된 클라이언트 세션이 유효한지 체킹
      if(request.isRequestedSessionIdValid() == true){
         out.print("세션이 유효합니다");   //(O)
      }else{
         out.print("세션이 유효하지 않습니다.");
      }
      
      //세션에 저장된 모든 세션 속성 삭제*******
      session.invalidate(); // 로그아웃
   %>   
   <h4>-----세션을 삭제하기 후-----</h4>
   <%//스크립틀릿
      //request객체에 포함된 클라이언트 세션이 유효한지 체킹
      if(request.isRequestedSessionIdValid() == true){
         out.print("세션이 유효합니다");   
      }else{
         out.print("세션이 유효하지 않습니다.");//(O)
      }
   %>
</body>
</html>

 

결과 화면5

 

 

 

  • getMaxInactiveInterval(), setMaxInactiveInterval() : 세션 유효 시간

session07.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
	<h4>----- 세션 유효 시간 변경 전 ------</h4>
	<%
		// 세션에 설정된 유효 시간(기본 1800초(30분))
		int time = session.getMaxInactiveInterval();
	
		out.print("<p>세션 유효 시간 : " + time + "초</p>");
	%>
	
	<h4>----- 세션 유효 시간 변경 후 ------</h4>
	<%
		// 세션 유효 시간을 60x60(1시간)으로 설정
		session.setMaxInactiveInterval(60*60); // 3600초
		time = session.getMaxInactiveInterval(); // 초단위
	
		out.print("<p>세션 유효 시간 : " + time + "초</p>");
	%>
</body>
</html>

 

결과 화면6

 

 

반응형