JSP
JSP 웹 프로그래밍 - 세션 (세션의 개요, 생성, 정보, 삭제, 유효 시간 설정)
록's
2023. 3. 7. 15:46
728x90
반응형
1. 세션의 개요
세션(session)
- 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
- 예를 들면 웹 쇼핑몰에서 장바구니나 주문 처리와 같은 회원 전용 페이지의 경우 로그인 인증을 통해 사용 권한을 부여
- 다른 웹 페이지에 갔다가 되돌아와도 로그인 상태가 유지되므로 회원 전용 페이지를 계속 사용할 수 있음
- 이렇게 사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것
- 웹 서버에서만 접근이 가능하므로 보안 유지에 유리하며 데이터를 저장하는 데 한계가 없음
- 오직 웹 서버에 존재하는 객체로 웹 브라우저마다 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 됨
- 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음
2. 세션 생성
세션 생성
- session 내장 객체의 setAttribute( ) 메소드를 사용
- setAttribute( ) 메소드를 이용하여 세션의 속성을 설정하면 계속 세션 상태를 유지할 수 있음
- 만약 동일한 세션의 속성 이름으로 세션을 생성하면 마지막에 설정한 것이 세션 속성 값이 됨

- 첫 번째 매개변수 name은 세션으로 사용할 세션 속성 이름을 나타내며, 세션에 저장된 특정 값을 찾아오기 위한 키로 사용
- 두 번째 매개변수 value는 세션의 속성 값
- 세션 속성 값은 Object 객체 타입만 가능하기 때문에 int, double, char 등의 기본 타입은 사용할 수 없음
세션 생성하기
// session01.jsp
<%@ 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> 비밀번호 : <input type="text" name="passwd">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// session01_process.jsp
<%@ 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 user_id = request.getParameter("id");
String user_pw = request.getParameter("passwd");
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>
- 출력 화면 -
3. 세션 정보
단일 세션 정보 얻기
- 세션에 저장된 하나의 세션 속성 이름에 대한 속성 값을 얻어오려면 getAttribute( ) 메소드를 사용
- getAttribute( ) 메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함
- 첫 번째 매개변수 name은 세션에 저장된 세션 속성 이름
- 해당 속성 이름이 없는 경우 null을 반환
세션에 저장된 속성 값 가져와 출력하기
// session02.jsp
<%@ 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 user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
out.println("설정된 세션의 속성 값[1]" + user_id + "<br>");
out.println("설정된 세션의 속성 값[2]" + user_pw);
%>
</body>
</html>
- 출력 -
다중 세션 정보 얻기
세션에 저장된 모든 세션 속성 이름과 속성 값 가져와 출력하기
// session03.jsp
<%@ 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>Session</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>
- 출력 -
4. 세션 삭제
단일 세션 삭제하기
- 세션에 저장된 하나의 세션 속성 이름을 삭제하려면 removeAttribute( ) 메소드를 사용
세션에 저장된 세션 속성 삭제하기1
// session04.jsp
<%@ 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>
<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");
%>
<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>
세션에 저장된 세션 속성 삭제하기2
// session05.jsp
<%@ 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>Session</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("userID");
%>
<h4> --- 세션을 삭제한 후 --- </h4>
<%
en = session.getAttributeNames();
i = 0;
while (en.hasMoreElements()) {
i++;
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.println("설정된 세션 이름 userID : " + name + "<br>");
out.println("설정된 세션 값 userPW : " + value + "<br>");
}
%>
</body>
</html>
-출력-
다중 세션 삭제하기
- 세션에 저장된 모든 세션 속성 이름을 삭제하려면 invalidate( ) 메소드를 사용
세션에 저장된 모든 세션 속성 삭제하기
// session.jsp
<%@ 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>
<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.print("세션이 유효합니다.");
} else {
out.print("세션이 유효하지 않습니다.");
}
session.invalidate();
%>
<h4> --- 세션을 삭제한 후 --- </h4>
<%
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.print("세션이 유효하지 않습니다.");
}
%>
</body>
</html>
- 출력 -
5. 세션 유효 시간 설정
세션 유효 시간
- 세션을 유지하기 위한 세션의 일정 시간
- 웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료
- 세션 유효 시간을 설정하기 위해 session 내장 객체의 setMaxInactiveInterval
( ) 메소드를 사용
세션 유효 시간을 가져와 출력하기
// session07.jsp
<%@ 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>
<h4>--- 세션 유효 시간 변경 전 ---</h4>
<%
int time = session.getMaxInactiveInterval() / 60;
out.println("세션 유효 시간 : " + time + "분<br>");
%>
<h4>--- 세션 유효 시간 변경 후 ---</h4>
<%
session.setMaxInactiveInterval(60 * 60);
time = session.getMaxInactiveInterval() / 60;
out.println("세션 유효 시간 : " + time + "분<br>");
%>
</body>
</html>
-출력-
세션 아이디와 웹 사이트에서 유지한 시간 출력하기
// session08.jsp
<%@ 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();
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>
- 출력 -
728x90
반응형