티스토리 뷰
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
- html base tag
- caption-side
- empty-cell
- 미디어 태그
- initialized
- 외부구성요소
- improt
- html input type
- ScriptTag
- typeof
- html layout
- html pre
- CascadingStyleSheet
- html a tag
- input type 종류
- html atrribute
- JavaScript
- 변수
- html
- text formatting
- A%B
- 기본선택자
- 입력양식
- BAEKJOON
- scanner
- css
- border-spacing
- 스크립태그
- Java
- selcetor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |