/ JSP

14. 세션

SEOUL G-캠프

0. 목차



Chapter14. 세션

Ch14 - 1. 세션이란?

Ch14 - 2. 세션 문법



Ch14 - 1. 세션이란?


▶ 쿠키 vs 세션

▷ 공통점 : 세션도 쿠키처럼 웹 브라우저와의 관계를 유지하는 수단
▷ 차이점 : 쿠키가 클라이언트 측에 저장되는 반면, 세션은 서버 상에 객체로 존재


▶ 세션의 장점

▷ 세션은 서버에서만 접근이 가능하여 보안이 좋음
  • .jsp가 아니면 접근 불가
▷ 저장할 수 있는 데이터에 한계가 없음



Ch14 - 2. 세션 문법


▶ 세션 사용 과정

▷ 세션은 클라이언트의 요청이 발생하면 자동 생성
session이라는 내부 객체를 지원하여 세션의 속성 설정 가능
session.setAttribute("session 이름", "session 값");


▶ 세션 관련 메서드

▷ setAttribute()
  • 세션에 데이터를 저장
▷ getAttribute()
  • 세션에서 데이터를 얻음
▷ getAttributeNames()
  • 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻음
▷ getId()
  • 자동 생성된 세션의 유니크한 아이디를 얻음
▷ isNew()
  • 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분
▷ getMaxInactiveInterval()
  • 세션의 유효 시간을 얻음
  • 가장 최근 요청시점을 기준으로 카운트
      // C:\BaeksEE\apache-tomcat-8.5.70\conf\web.xml
        
      <session-config>
          <session-timeout>30</session-timeout> // 유효 시간 30분 디폴트 값, 변경 가능
      </session-config>   
    
▷ removeAttribute()
  • 세션에서 특정 데이터 제거
▷ Invalidate()
  • 세션의 모든 데이터를 삭제

▶ 세션 메서드 실습1 : 세션 사용 과정

▷ 세션 생성 : sessionInit.jsp
// sessionInit.jsp

<body>

	<%
		session.setAttribute("mySessionName", "mySessionData"); // mySessionName 세션 생성
		session.setAttribute("myNum", 12345); // myNum 세션 생성
	%>
	
	<a href="sessionGet.jsp">session get</a> // 세션 사용하는 곳으로 이동

</body>


▷ 세션 사용 : sessionGet.jsp
// sessionGet.jsp

<body>

	<%
		Object obj1 = session.getAttribute("mySessionName"); // string이든 int든 get해서 사용할 땐 Object 타입으로 받음
		String mySessionName = (String)obj1;
		out.println(mySessionName +"<br />");
		
		Object obj2 = session.getAttribute("myNum");
		Integer myNum = (Integer)obj2;
		out.println(myNum +"<br />");
		
		out.println("************************ <br />");
		
		String sName;
		String sValue;
		Enumeration enumeration = session.getAttributeNames(); // 있는 세션 다 꺼냄
		while(enumeration.hasMoreElements()){
			sName = enumeration.nextElement().toString();
			sValue = session.getAttribute(sName).toString();
			out.println("sName : " + sName + "<br />");
			out.println("sValue : " + sValue + "<br />");
		}
		
		out.println("************************ <br />");
		
		String sessionID = session.getId(); // 특정 id를 꺼냄, id는 서버에서 만들어 주는 것
		out.println("sessionID : " + sessionID + "<br />");
		int sessionInter =  session.getMaxInactiveInterval(); // 세션 유효 시간
		out.println("sessionInter : " + sessionInter + "<br />");
		
		out.println("************************ <br />");
		
		session.removeAttribute("mySessionName"); // 특정 세션 삭제
		Enumeration enumeration1 = session.getAttributeNames();
		while(enumeration1.hasMoreElements()){
			sName = enumeration1.nextElement().toString();
			sValue = session.getAttribute(sName).toString();
			out.println("sName : " + sName + "<br />");
			out.println("sValue : " + sValue + "<br />");
		}
		
		out.println("************************ <br />");
		
		session.invalidate(); // 모든 세션 삭제
		if(request.isRequestedSessionIdValid()) {
			out.println("session valid");
		} else {
			out.println("session invalid");
		}
	%>

</body>


▷ 세션 확인 : sessionTest.jsp
// sessionTest.jsp

<body>

	<%
		Enumeration enumeration = session.getAttributeNames(); // 있는 세션 다 꺼냄
		int i = 0;
		while(enumeration.hasMoreElements()) {
			i++;
			
			String sName = enumeration.nextElement().toString();
			String sValue = (String)session.getAttribute(sName);
			
			out.println("sName : " + sName + "<br />");
			out.println("sValue : " + sValue + "<br />");
		}
		
		if(i == 0) out.println("해당 세션이 삭제 되었습니다.");
		
	%>

</body>



▶ 세션 메서드 실습2 : 로그인

▷ id/pw 입력 : login.html
// login.html

<body>

	<form action="loginOk.jsp" method="post"> // 입력 후 loginOk.jsp에서 id.pw 확인
		아이디 : <input type="text" name="id" size="10"><br />
		비밀번호 : <input type="password" name="pw" size="10"><br />
		<input type="submit" value="로그인">
	</form>
	
</body>


▷ id/pw 확인 : loginOk.jsp
// loginOk.jsp

<body>
	<%!
		String id, pw;
	%>
	<%
		id = request.getParameter("id");
		pw = request.getParameter("pw");
		
		if(id.equals("abcde") && pw.equals("12345")) {
			session.setAttribute("id", id);	
			response.sendRedirect("welcome.jsp");
		} else {
			response.sendRedirect("login.html");
		}
	%>

</body>
▷ id/pw 일치 시 : welcome.jsp
// welcome.jsp

<body>

	<%
		Enumeration enumeration = session.getAttributeNames(); // 세션 이름 사용
		while(enumeration.hasMoreElements()){
			String sName = enumeration.nextElement().toString(); // 세션 이름 형변환, Object → String
			String sValue = (String)session.getAttribute(sName); // 세션 값도 형변환, Object → String
			
			if(sValue.equals("abcde")) out.println(sValue + "님 안녕하세요." + "<br />");
		}
	%>
	
	<a href="logout.jsp">로그아웃</a>
	
</body>


▷ 로그아웃 했을 때 : logout.jsp
<body>
	
	<%
		Enumeration enumeration = session.getAttributeNames();
		while(enumeration.hasMoreElements()) {
			String sName = enumeration.nextElement().toString();
			String sValue = (String)session.getAttribute(sName);
			
			if(sValue.equals("abcde")) session.removeAttribute(sName); // 기존에 입력한 id/pw는 삭제
		}
		
	%>
	
	<a href="sessiontest.jsp">sessionTest</a>
	
</body>