티스토리 뷰

수업/└JSP

[CH13]세션(Session)

onlyun 2022. 2. 17. 10:12

 

1. 세션(Session)

클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것

웹 서버에서만 접근 가능 → 보안 유리, 데이터 저장에 한계없음(웹서버 저장 용량에 따름)

 

ex) 웹 브라우저에서 로그인 한 후, 다른 웹 사이트를 방문했다가 돌아왔을 때도 로그인이 유지되는 상태.

ex)웹 브라우저에서 웹 사이트로 로그인한 후, 웹 브라우저를 닫았다가 웹 사이트로 다시 접속했을 때 로그인이 유지되는 것. → 브라우저가 닫혀도 세션에 로그인 정보가 들어가 있기 때문에 로그인이 유지되는 상태.

 

웹 서버에 존재하는 객체. 웹 브라우저마다 하나씩 존재. → 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위

 

(1) 세션 내장 객체 메소드(11)

setAttribute(name, value) getCreationTime() getLastAccessedTime()  
이름 name, 속성 value인
세션 할당(생성)
세션 생성된 시간 반환 클라이언트의
마지막 request 시간
 
isNew() getId() getAttribute(name) getAttributeNames()
해당 세션의 생성 여부
처음 생성된 세션 true
세션에 할당된 고유 아이디
String형 반환
이름이 name인 value(값)
Object형 반환
세션 속성 이름을
Enumeration(열거) 반환
removeAttribute(name) getMaxInctiveInterval() setMaxInActiveInterval() invalidate()
이름이 name인
value 제거
세션 유지 위한
세션 유지 시간 반환(1,800초)
세션 유지하는
최대 시간 설정
세션에 저장된
모든 세션 속성 제거

 

2. 세션 생성

-setAttribute(name, value) : 속성 이름이 중복될 경우, 마지막에 설정한 것이 속성값(value)

└속성값(value)는 Object 타입이라 기본형(int, double, char) 불가

 

#예제) 아이디, 비밀번호 받아서 세션 생성

-입력폼 페이지 : 아이디, 비밀번호 입력

<%@ 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>
		<p> 비밀번호 : <input type="text" name="pw"/></p>
		<p><input type="submit" value="전송"></p>
	</form>
</body>
</html>

-프로세스 페이지 : 세션 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String user_id = request.getParameter("id"); <!--입력 값 받아와 변수 저장-->
	String user_pw = request.getParameter("pw");
	
	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>

 

└세션 생성 : 세션 속성(userID)에 값(user_id) 설정.

session.setAttribute("userID", user_id)

-출력결과 : 적합한 아이디, 비번 입력했을 때

세션 설정이 성공했습니다.
admin님 환영합니다

3. 세션 정보

(1) 단일 세션 정보 얻어오기

-getAttrubute() 메소드 : 세션 속성 이름에 대한 속성 값(value) 가져오기.

 반환 유형이 Object형이므로 형 변환 필요. 세션에 속성 이름이 저장되어 있지 않으면 null값 반환.

 

#예제) 세션에 저장된 세션 속성 이름과 속성 값 가져와서 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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+"<br>");
%>
</body>
</html>

-출력 결과

설정된 세션의 속성 값[1] : admin
설정된 세션의 속성 값[2] : 1234

└세션 생성한 것에서 값을 가져옴. 이전에 만들었던 세션 입력폼에 입력했던 값.(session.jsp의 입력값)

 

(2) 다중 세션 정보 얻어오기(가져오기)

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

<%@ 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>Insert title here</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>

-결과 출력

설정된 세션의 속성 이름 [ 1 ] : userPW
설정된 세션의 속성 값 [ 1 ] : 1234
설정된 세션의 속성 이름 [ 2 ] : userID
설정된 세션의 속성 값 [ 2 ] : admin

 

4. 세션 삭제

-로그인 정보가 사라지는 것? 가입된 회원 정보가 사라지는 건 아니고?

 

(1) 단일 세션 삭제

-removeAttribute(name) : name에 해당하는 값(value)삭제.

 

#예제) 아이디 삭제하기

세션 생성할 때, 넣었던 admin, 1234를 삭제하는 것.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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");
 		<!--session.removeAttribute("userPW");-->
	%>
	<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>

-출력 결과

----- 세션 삭제 전 -----
설정된 세션 이름 userID : admin
설정된 세션 이름 userPW : 1234

----- 세션 삭제 후 -----
설정된 세션 이름 userID : null
설정된 세션 이름 userPW : 1234

└session name=userID인 값을 삭제해서 null값 출력

 

#예제) 비밀번호 삭제하기

<%@ 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>Insert title here</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("userPW");
	%>
	<h4>-----세션을 삭제 후 -----</h4>
	<%
		en = session.getAttributeNames();
		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>

-출력결과

-----세션을 삭제 하기 전 -----
설정된 세션 이름 : [ 1 ] : userPW
설정된 세션 값 : [ 1 ] : 1234

-----세션을 삭제 후 -----

└세션을 삭제했기 때문에 아무 것도 안 뜸. 

 

 

(2) 다중 세션 삭제

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

(*위에서 세션을 삭제한 상태라 세션이 없는 상태. 제일 처음에 했던 세션 생성을 다시 해줄 것)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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.println("세션 유효");
		}else{
			out.println("세션 유효하지 않음");
		}
		session.invalidate(); //세션 삭제
	%>
	<h4>-----세션 삭제한  후  -----</h4>
	<%
		out.println("설정된 세션 이름 userID : " + user_id + "<br>");
		out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
		
		if(request.isRequestedSessionIdValid() == true){
			out.println("세션 유효");
		}else{
			out.println("세션 유효하지 않음<br>");
		}
	%>
</body>
</html>

-출력결과

-----세션 삭제하기 전 -----
설정된 세션 이름 userID : admin
설정된 세션 값 userPW : 1234
세션 유효
-----세션 삭제한 후 -----
설정된 세션 이름 userID : admin
설정된 세션 값 userPW : 1234
세션 유효하지 않음

└값이 출력되는 이유는 String에 저장했기 때문에 출력됨. 세션에 있는 값이 아니라 String 변수에 저장된 거라서.

 

5. 세션 유효 시간

세션을 유지하기 위한 일정 시간.

웹 브라우저에 마지막으로 접근한 시간부터 일정 시간 내에 다시 웹브라우저에 접근하지 않으면 자동 세션 종료.

-setMaxInactiveInterval() 메소드 사용

세션 유효 시간 기본값은 1,800초(30분)

 

#예제) 세션 유효 시간 가져오기, 변경하기

getMaxInactiveInterval(), setMaxInactiveInterval()

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

-출력 결과

----------- 세션 유효 시간 변경 전 ----------
세션 유효 시간 : 30분
----------- 세션 유효 시간 변경 후 ----------
세션 유효 시간 : 60분

 

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

마지막 접근 시간 - 세션 생성 시간

<%@ 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();  //id값
	
		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>

-출력 결과

세션 아이디 : 795B082F9D02F1A340FF48692386E52D
요청 시작 시간 : 1645065166704
요청 마지막 시간 : 1645065704927
웹 사이트 경과 시간 : 8

 

[연습문제4]

p448

'수업 > └JSP' 카테고리의 다른 글

[CH14]쿠키  (0) 2022.02.17
[CH13]세션 연습문제  (0) 2022.02.17
[CH07]파일업로드  (0) 2022.02.15
[CH06]폼 태그  (0) 2022.02.14
[CH05]내장객체  (0) 2022.02.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함