세션
: 클라이언트와 웹 서버(ex. 톰켓) 간의 상태를 지속적으로 유지하는 방법
웹 서버에서만 접근 가능 => 보안 유지에 좋음 + 데이터 저장의 한계가 없음
ex) 로그인
웹 서버에 존재하는 객체(세션)로 웹 브라우저마다 하나씩 존재한다. => 웹 서버의 서비스를 제공 받는 사용자를 구분하는 단위가 됨
웹 브라우저를 닫기 전까지 사용자 정보가 웹 서버에 보관되어 있음
- session 내장 객체 메소드의 종류
메소드 | 반환 유형 | 설명 |
getAttribute(String name) | java.lang.Object | 세션 속성 이름이 name인 값을 반환 Object 형으로 반환되기에 형 변환 필수 |
getAttributeNames() | java.util.Enumeration | 세션 속성 이름을 Enumeration 객체 타입으로 반환 |
getCreation Time() | long | 세션 생성 시간 반환 1970년 1월 1일 0시 0초부터 현재 경과한 시간을 반환 |
getId() | java.lang.String | 세션에 할당된 고유 아이디를 String 형태로 반환 |
getLastAccessedTime() | long | 클라이언트가 마지막으로 request를 보낸 시간 반환 |
getMaxInactiveInterval(int interval) | int | 세션을 유지하기 위해 세션 유지 시간 반환 기본값 : 1800초(30분) |
inNew() | boolean | 세션 생성 여부 반환 처음 생성된 세션 : true, 이전에 생성된 세션 : false |
removeAttribute(String name) | void | name인 속성 제거 |
setAttribute(String name, Object value) | void | name 속성에 value 할당 |
setMaxInactiveInterval(int interval) | void | 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정 |
Invalidate() | 세션에 저장된 모든 속성 제거 |
세션 내장 객체 예시
- setAttribute() : 세션 생성
session01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session 내장 객체</title>
</head>
<body>
<!-- 아이디, 비밀번호, submit버튼(전송)
요청URI : session01_process.jsp
요청파라미터 : {id=admin&passwd=java}
요청방식 : post
-->
<form action="session01_process.jsp" method="post">
<p>아이디 : <input type="text" name="id" placeholder="아이디" required></p>
<p>비밀번호 : <input type="text" name="passwd" placeholder="비밀번호" required></p>
<p><input type="submit" value="전송"></p>
</form>
</body>
</html>
session01_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!-- 아이디, 비밀번호, submit버튼(전송)
요청URI : session01_process.jsp
요청파라미터 : {id=admin&passwd=java}
요청방식 : post
-->
<%//스크립틀릿
String user_id = request.getParameter("id");
String user_pw = request.getParameter("passwd");
//JSP에는 session 기본 내장 객체가 있음(scope는 session영역)
//session객체의 속성명인 userID에 매핑하여 user_id변수의 값을 입력
if(user_id.equals("admin") && user_pw.equals("java")) {
session.setAttribute("userID", user_id); //admin
session.setAttribute("userPW", user_pw); //java
//request 기본 객체의 getSession()메소드를 사용하여 session객체 생성 가능
// HttpSession httpSession = request.getSession();
// httpSession.setAttribute("userID", user_id); //admin
// httpSession.setAttribute("userPW", user_pw); //java
out.print("세션 설정 성공<br />");
out.print(user_id + "님 환영합니다.");
}else{
out.print("세션 설정 실패!");
}
%>
</body>
</html>
- getAttribute() : 단일 세션 정보 얻기
session02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
<%//스클립틀릿
/*
session.setAttribute("userID", user_id); //admin
session.setAttribute("userPW", user_pw); //java
*/
//Object하위의 String 형으로 다운캐스팅
String user_id = (String)session.getAttribute("userID"); //admin
String user_pw = (String)session.getAttribute("userPW"); //java
out.print("설정된 세션의 속성 값[1] : " + user_id + "<br />");
out.print("설정된 세션의 속성 값[2] : " + user_pw + "<br />");
%>
</body>
</html>
- getAttributeNames() : 다중 세션 정보 얻기
session03.jsp
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
<%//스크립틀릿
//session.setAttribute(이름, 값)
//session.setAttribute("userID", user_id); //admin
//session.setAttribute("userPW", user_pw); //java
String name; String value;
int i = 0;
Enumeration en = session.getAttributeNames(); //userID, userPW 열거형
//세션 속성 이름이 있을때까지 반복
//en.hasMoreElements() : fetch
while(en.hasMoreElements()){ //2회 반복
name = en.nextElement().toString(); //userID 다음에는 userPW
value = session.getAttribute(name).toString(); //session.getAttribute("userId")
out.print("설정된 세션 속성 명 [" + i + "] : " + name + "<br />");
out.print("설정된 세션 속성 값 [" + i + "] : " + value + "<br />");
out.print("<hr />");
}
%>
</body>
</html>
- removeAttribute() : 단일 세션 삭제하기
session04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
<!-- session01.jsp와 session01_process.jsp를 먼저 수행 후 -->
<!--
session.setAttribute("userID", user_id); //admin
session.setAttribute("userPW", user_pw); //java
-->
<!-- P.430 -->
<h4>-----세션 삭제 전-----</h4>
<%//스크립틀릿
String user_id = (String)session.getAttribute("userID"); //admin
String user_pw = (String)session.getAttribute("userPW"); //java
out.print("설정된 세션 이름 userID : " + user_id + "<br />"); //admin
out.print("설정된 세션 이름 userPW : " + user_pw + "<br />"); //java
//잘 안씀
session.removeAttribute("userID");
session.removeAttribute("userPW");
%>
<h4>-----세션 삭제 후-----</h4>
<%//스크립틀릿
user_id = (String)session.getAttribute("userID"); //null
user_pw = (String)session.getAttribute("userPW"); //java
out.print("설정된 세션 이름 userID : " + user_id + "<br />"); //null
out.print("설정된 세션 이름 userPW : " + user_pw + "<br />"); //java
%>
</body>
</html>
- getSession(), isRequestedSessionIdValid(), invalidate() : 다중 세션 삭제하기
session06.jsp
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
<!-- session01.jsp와 session01_process.jsp를 먼저 수행 후 -->
<!--
session.setAttribute("userID", user_id); //admin
session.setAttribute("userPW", user_pw); //java
-->
<%
HttpSession session2 = request.getSession();
Enumeration en = session2.getAttributeNames();
while(en.hasMoreElements()) {
String name = (String)en.nextElement();
String value = (String)session2.getAttribute(name);
out.print("<p>name : " + name + ", value : " + value + "</p>");
}
%>
<h4>-----세션을 삭제하기 전-----</h4>
<%//스크립틀릿
String user_id = (String)session.getAttribute("userID"); //admin
String user_pw = (String)session.getAttribute("userPW"); //java
//request객체에 포함된 클라이언트 세션이 유효한지 체킹
if(request.isRequestedSessionIdValid() == true){
out.print("세션이 유효합니다"); //(O)
}else{
out.print("세션이 유효하지 않습니다.");
}
//세션에 저장된 모든 세션 속성 삭제*******
session.invalidate(); // 로그아웃
%>
<h4>-----세션을 삭제하기 후-----</h4>
<%//스크립틀릿
//request객체에 포함된 클라이언트 세션이 유효한지 체킹
if(request.isRequestedSessionIdValid() == true){
out.print("세션이 유효합니다");
}else{
out.print("세션이 유효하지 않습니다.");//(O)
}
%>
</body>
</html>
- getMaxInactiveInterval(), setMaxInactiveInterval() : 세션 유효 시간
session07.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>session</title>
</head>
<body>
<h4>----- 세션 유효 시간 변경 전 ------</h4>
<%
// 세션에 설정된 유효 시간(기본 1800초(30분))
int time = session.getMaxInactiveInterval();
out.print("<p>세션 유효 시간 : " + time + "초</p>");
%>
<h4>----- 세션 유효 시간 변경 후 ------</h4>
<%
// 세션 유효 시간을 60x60(1시간)으로 설정
session.setMaxInactiveInterval(60*60); // 3600초
time = session.getMaxInactiveInterval(); // 초단위
out.print("<p>세션 유효 시간 : " + time + "초</p>");
%>
</body>
</html>
'스프링' 카테고리의 다른 글
[스프링] 22.5장 과제 (0) | 2024.04.18 |
---|---|
[스프링] 22장 쇼핑몰 시스템8, 쿠키 생성 (1) | 2024.04.18 |
[스프링] 20장 과제 (0) | 2024.04.17 |
[스프링] 19장 필터, 쇼핑몰 시스템7 (0) | 2024.04.17 |
[스프링] 18장 쇼핑몰 시스템6 (1) | 2024.04.16 |