.jsp 연습하기 - 세션

오늘·2021년 5월 14일
0

웹 페이지 연습

목록 보기
13/35

세션(session)

  • 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
  • 웹 서버에서만 접근이 가능하므로 보안 유지에 유리하며 데이터를 저장하는데 한계가 없다.
  • 오직 웹 서버에만 존재하는 객체로 웹 브라우저마다 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 된다.
  • 웹 브라우저를 닫기 전까지는 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있기에 사용자 정보를 잃지 않는다.


세션 생성

  • session 내장 객체의 setAttribute() 메소드를 사용한다.
  • setAttribute() 메소드를 이용하여 세션의 속성 설정시 계속 세션 상태를 유지할 수 있다.
  • 만약 동일한 세션의 속성 이름으로 세션 생성시 마지막에 설정한 것이 세션 속성 값이 된다.
  • 모양 void setAttribute(String name, Object value)
    세션 속성 값은 오브젝트 객체 타입만 가능하기 깨문에 int, char와 같은 기본 타입은 사용할 수 없다.

작성해보기

  1. 값 보내는 폼 작성
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
	<p> 세션 생성하기 </p>
	<form method="post" action="1_session_process.jsp">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="pw">
		<input type="submit" value="로그인">
	</form>
</body>
</html>
  1. 세션 연결할 process 작성
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
	<p> 세션 생성하기 - 서버쪽 코드 </p>
	<%
		String s_id = request.getParameter("id");
		String s_pw = request.getParameter("pw");
		
		if (s_id.equals("admin") && s_pw.equals("1234")){
			session.setAttribute("userID", s_id);
			session.setAttribute("userPW", s_pw);
			out.print("세션 설정이 성공했습니다. <br>");
			out.print(s_id+"님 환영합니다");
		} else {
			out.print("세션 설정이 실패했습니다. 다시 확인해주세요");
		}
	%>
</body>
</html>

설정하지 않은 값을 보내면
연결이 실패했다고 출력
설정한 값을 보내면
연결 성공


단일 세션 정보 얻기

  • 세션에 저장된 하나의 세션 속성에 대한 값을 얻어오려면 getAttribute() 메소드를 이용한다.
  • 모양 Object getAttribute(String name)
    반환 유형이 오브젝트 형이므로 반드시 형 변환이 필요하다.

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

  1. 값 보내는 폼
<body>
	<p> 세션 생성하기 </p>
	<form method="post" action="1_session_result.jsp">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="pw">
		<input type="submit" value="로그인">
	</form>
</body>
  1. 속성 출력하기
<body>
	<%
		String r_id = (String) session.getAttribute("userID");
		String r_pw = (String) session.getAttribute("userPW");
		
		out.print("설정된 세션의 속성 값[1] : " + r_id + "<br>");
		out.print("설정된 세션의 속성 값[2] : " + r_pw);
	%>
</body>

어떤 값을 입력해도 상관은 없다
로그인 값을 누르면 설정된 값이 나온다.


세션생성이 이미 된 상태라면 그냥 바로 process 파일을 실행해도 값이 똑 같이 나오긴 한다.


다중 세션 정보 얻기

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

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
	<p> 세션에 저장된 여러 속성 이름과 값 가져와 출력하기 </p>
	<%
		Enumeration en = session.getAttributeNames();
		int i=0;
		
		// 세션의 개수 카운팅하기
		while (en.hasMoreElements()){
			i++;
			String name = en.nextElement().toString();
			String value = session.getAttribute(name).toString();
			
			out.print("설정된 세션의 속성 이름[" + i + "] : " + name + "<br>");
			out.print("설정된 세션의 속성 값[" + i + "] : " +value + "<br>");
		}

	%>
</body>
</html>

이런식으로 출력된다


단일 세션 삭제

<body>
	<p> 세션 정보 지우기 </p>
	<h4>----------세션 삭제하기 전----------</h4>
	<%
		String u_id = (String) session.getAttribute("userID");
		String u_pw = (String) session.getAttribute("userPW");
		out.print("설정된 세선 이름 userID : " + u_id + "<br>");
		out.print("설정된 세션 값 userPW : " + u_pw + "<br>");
		
		// 세션 삭제
		session.removeAttribute("userID");
	%>
	<h4>----------세션 삭제한 후----------</h4>
	<%
		u_id = (String) session.getAttribute("userID");
		u_pw = (String) session.getAttribute("userPW");
		out.print("설정된 세선 이름 userID : " + u_id + "<br>");
		out.print("설정된 세션 값 userPW : " + u_pw + "<br>");
	%>
</body>


다중 세션 삭제

방법 1. removeAttribute() 사용

위에 했던 것처럼 while을 돌리며 삭제하기

<%
	en = session.getAttrributeNames();
    
    i=0;
    while(en.hasMaorElements()) {
    	i++;
        name = en.nextElement().toString();
        value = session.getAttribute(name).toString();
        out.print("설정된 세션 이름 [" + i + "] : " + name + "<br>");
        out.print("설정된 세션 값 [" + i " "] : " + value + "<br>");
        }
%>

방법 2. invalidate() 사용

세션에 저장된 모든 세션 속성명을 삭제하기
그냥 session.invalidate() 로 사용하면 된다.


세션 유효 시간

  • 세션을 유지하기 위한 세션의 일정 시간
  • 웹 브라우저에 마지막으로 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션 종료
  • 사용 예 session.setMaxInactiveInterval(60 * 60);

1. 기본값

	<p> 세션의 유효시간(설정된 기본값 얻기)<p>
	<%
		int time = session.getMaxInactiveInterval();
	
		out.print("세션 기본 유효시간 : " + time +"초  = " + (time/60)+ "분");
	%>
	<hr>

2. 변경해보기

	<p> 세션의 유효시간 1분으로 줄이기 </p>
	<%
		session.setMaxInactiveInterval(1800);
		time = session.getMaxInactiveInterval();
	
		out.print("세션 유효시간 : " + time +"초  = " + (time/60)+ "분");
	%>


0개의 댓글

관련 채용 정보