13장. 세션
1. 개요
2. 세션 생성
3. 세션 정보
4. 세션 삭제
5. 세션 유효 시간 설정
1. 개요
세션이란?
클라이언트와 웹 서버간의 상태를 지속적으로 유지하는 방법
ex)다른 웹 페이지에 갔다가 돌아와도 로그인 상태 유지
①보안 유지에 유리(웹 서버에서만 접근 가능)
②데이터 저장에 한계 x
③웹 서버의 서비스를 제공받는 사용자를 구분하는 단위(세션은 웹 서버에 존재하는 객체, 웹 브라우저마다 하나씩 존재)
session 내장 객체 메서드 종류
메서드 | 반환 유형 | 설명 |
getAttribute(String name) | java.lang.Object | 세션 속성 이름이 name인 속성 값을 Object 형으로 반환(캐스팅 필요) |
getAttributeNames() | java.util.Enumeration | 세션 속성 이름을 Enumeration 객체 타입으로 반환 |
getCreationTime() | long | 세션이 생성된 시간 반환(milisecond) |
getId() | java.lang.String | 세션에 할당된 고유 ID(주민번호로 이해) |
getLastAccessedTime() | long | 클라이언트가 마지막으로 request 보낸 시간 반환 |
getMaxInactiveInterval(int interval) | int | 세션 유지 시간 반환(최대 유지 시간), 기본 1800초 |
isNew() | boolean | 처음 생성된 세션이면 true, 이전에 생성된 세션이면 false |
removeAttribute(String name) | void | 세션 속성 이름이 name인 속성 제거 |
setAttribute(String name, Object value) | void | 세션 속성 이름이 name인 속성에 value 할당 |
setMaxInactiveInterval(int interval) | void | 세션 유지 시간 설정(초 단위) |
Invalidate() | 현재 세션에 저장된 모든 세션 속성 제거 |
2. 세션 생성
세션 사용을 위해서는 세션 생성 필요
void setAttribute(String name, Object value) 사용
session.setAttribute("userId", "admin");
<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>
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("세션 설정에 실패했습니다");
}

2-1. 세션을 생성하는 또 다른 방법
1)request.getSession()
<%@ page session = "false" %>
<%
HttpSession httpSession = request.getSession();
List list = (List)httpSession.getAttribute("list");
list.add(productId);
%>
2)<%@ page session = "true"%>(기본값)
세션 생성 후 session 내장 객체로 세션 사용 가능
<%@ page session = "true" %>
<%
session.setAttribute("userInfo", userInfo);
%>
3. 세션 정보
3.1 단일 세션 정보 얻기
3.2 다중 세션 정보 얻기
3.1 단일 세션 정보 얻기
Object getAttribute(String name)
String id = (String)session.getAttribute("memberId");
getAttribute()의 반환 유형은 Object→형 변환 필요
예제
<%
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);
%>

3.2 다중 세션 정보 얻기
Enumeration getAttributeNames();
Enumeration enum = session.getAttributeNames();
while(enum.hasMoreElements()){
String name = enum.nextElement().toString();
String value = session.getAttribute(name).toString();
}
예제
<%
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>");
}
%>

4. 세션 삭제
4.1 단일 세션 삭제
4.2 다중 세션 삭제
4.1 단일 세션 삭제(key값 삭제)
void removeAttribute(String name)
session.removeAttribute("memberId");
예제
<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>");
%>

예제2
<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("설정된 세션 이름 ["+i+"]: "+name+"<br>");
out.println("설정된 세션 값 ["+i+"]: "+value+"<br>");
}
%>

4.2 다중 세션 삭제(전체 정보 삭제)
void invalidate()
session.invalidate();
예제: 모든 세션 속성 삭제
<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("세션이 유효하지 않습니다.");
}
%>

5. 세션 유효 시간 설정
void setMaxInactiveInterval(int interval)
session.setMaxInactiveInterval(60*60);
예제: 세션 유효 시간 설정, 출력
<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>");
%>

예제: 세션 아이디, 유지 시간 출력
<%
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>");
%>

'정리노트' 카테고리의 다른 글
[JSP] 데이터베이스, JDBC (0) | 2023.12.20 |
---|---|
[JSP]쿠키, 데이터베이스 (0) | 2023.12.19 |
[JSP] (0) | 2023.12.15 |
[JSP] 필터 (0) | 2023.12.14 |
[JSP] 시큐리티, 예외 처리, 필터 (0) | 2023.12.13 |