일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Homebrew
- Mac
- 반복문
- 컬렉션프레임워크
- 자바
- servlet
- 자바문제
- python
- Android
- Error
- Oracle
- 이클립스
- html
- API
- 배열
- 단축키
- crud
- spring
- ddit
- 생활코딩
- nodejs
- 객체지향
- pyqt
- jsp
- Java
- FastAPI
- 맥
- JDBC
- 대덕인재개발원
- ibatis
Archives
- Today
- Total
romworld
JSP 26 - 세션(session) 본문
세션(session)
- 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
- 예) 웹 쇼핑몰 장바구니나 주문 처리와 같은 회원 전용 페이지의 경우 로그인 인증을 통해 사용 권한을 부여
- 다른 웹 페이지에 갔다가 되돌아와도 로그인 상태가 유지됨
- 오직 웹 서버에 존재하는 객체
session 내장 객체 주요 메소드
- setAttribute()
- getAttrubute()
- invalidate()
session 꺼내기
<session01.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<!--
후보키(Candidate key) : Not Null, No Duplicate
기본키(Primary Key) : 후보키 중에 대표적인 속성을 1개 선택(Not Null, No Duplicate)
대체키(Alternate key) : 후보키 중에 기본키가 안된 속성들
외래키(Foreign key) : 부모테이블의 기본키가 자식테이블의 외래키로 전이(copy)됨.
자식테이블의 외래키는 부모테이블의 기본키를 참조(reference)함
복합키(Composite key) : 테이블에 후보키가 없을 때 2개 이상의 속성을 하나로 묶어 후보키 및 기본키로 설정
-->
<!-- 폼 페이지
요청 URL : session01_process.jsp
요청 파라미터 : {"id":"a001","passwd":"java"}
-->
<form action="session01_process.jsp" method="post">
<!-- 폼 데이터
required : 필수(madatory) -> Not null
-->
<p>아이디 : <input type="text" name="id" required /></p>
<p>비밀번호 : <input type="text" name="passwd" required/></p>
<p><input type="submit" value="전송" /></p>
</form>
</body>
</html>
<session01_process.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<!-- 폼 페이지
요청 URL : session01_process.jsp
요청 파라미터 : {"id":"a001","passwd":"java"}
-->
<%
// 요청 파라미터타입은 String
String user_id = request.getParameter("id"); //a001
String user_pw = request.getParameter("passwd"); //java
//JSP에는 sesssion 기본 내장 객체가 있음(scope은 session영역)
if(user_id.equals("admin") && user_pw.equals("1234")){ // 관리자인지?
// jsp에서 session 쓰는 방법
session.setAttribute("userID", user_id);
session.setAttribute("userPW", user_pw);
// application 내장 객체. 웹브라우저에서 정보 공유
application.setAttribute("userID", user_id);
application.setAttribute("userPW", user_pw);
/*
// request 기본 객체의 getSession() 메소드를 사용하여 session 객체 생성 가능
// 서블릿에서 session 쓰는 방법.
HttpSession httpSession = request.getSession();
httpSession.setAttribute("userID", user_id);
httpSession.setAttribute("userPW", user_pw);
*/
out.print("<h2>세션 설정이 성공했습니다.</h2>");
out.print("<h5>" + user_id + "님 환영합니다.</h5>");
}else{ // 관리자가 아니면...
out.print("<h2>세션 설정이 실패했습니다.</h2>");
}
%>
<p><a href="session02.jsp">세션 정보 확인하기</a></p>
</body>
</html>
<sesson02.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<%
//session.setAttribute("userID","admin");
//session.setAttribute("userPW","1234");
// session은 동일한 웹브라우저 내에서 정보가 공유됨
// getAttribute()메소드의 리턴타입은 Object
String user_id = (String)session.getAttribute("userID");
String user_pw = (String)session.getAttribute("userPW");
// application 내장 객체. 웹브라우저에서 정보 공유됨
// getAttribute() 메소드의 리턴타입은 Object
String user_id2 = (String)application.getAttribute("userID");
String user_pw2 = (String)application.getAttribute("userPW");
out.print("<p>설정된 세션의 속성 값 [1] : " + user_id +"</p>");
out.print("<p>설정된 세션의 속성 값 [2] : " + user_pw +"</p>");
out.print("<hr />");
out.print("<p>설정된 세션의 속성 값 [2] : " + user_id2 +"</p>");
out.print("<p>설정된 세션의 속성 값 [2] : " + user_pw2 +"</p>");
%>
</body>
</html>
- session과 application의 차이점은
- session은 동일한 웹브라우저만 가능하지만 (크롬->크롬)
- application은 브라우저가 달라도 정보가 공유된다. (크롬->웨일)
다중 session 꺼내기
<%
/* 다중 세션 정보 얻기
- session.getAttributeNames()
- 세션에 저장된 여러 개의 세션 속성 이름들을 Enumeration 객체 타입으로 리턴해줌
*/
Enumeration en = session.getAttributeNames();
out.print("<p>en : " + en + "</p>");
//session.setAttribute("userID", user_id);
//session.setAttribute("userPW", user_pw);
out.print("<p>en : " + en.nextElement().toString() + "</p>");
out.print("<p>en : " + en.nextElement().toString() + "</p>");
%>
<session03.jsp>
다중 값을 꺼낼 경우 hasMoreElements()로 꺼내온다.
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<%
/* 다중 세션 정보 얻기
- session.getAttributeNames()
- 세션에 저장된 여러 개의 세션 속성 이름들을 Enumeration 객체 타입으로 리턴해줌
*/
Enumeration en = session.getAttributeNames();
String name = "";
String value = "";
out.print("<p>en : " + en + "</p>");
//session.setAttribute("userID", user_id);
//session.setAttribute("userPW", user_pw);
// en.hasMoreElements() : 세션 속성 이름이 있을 때까지만 반복
while(en.hasMoreElements()){
// 세션 속성 이름
name = en.nextElement().toString();
out.print("<p>name : " + name + "</p>");
// 그 속성 이름에 매핑되어 있는 값
value = (String)session.getAttribute(name);
//value = session.getAttribute(name).toString(); 이렇게 써도 됨
out.print("<p>value : " + value + "</p>");
}
%>
</body>
</html>
session 속성 추가
<session01_process.jsp>
session.setAttribute("userHP", "010-1234-5678");
session 삭제
- session.removeAttribute()
<session04.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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
session.setAttribute("userHP", "010-1234-5678"); 010-123-1234
-->
<!-- P.430 -->
<h4>-----세션 삭제 전-----</h4>
<%//스크립틀릿
String user_id = (String)session.getAttribute("userID"); //admin
String user_pw = (String)session.getAttribute("userPW"); //java
String user_hp = (String)session.getAttribute("userHP"); //java
out.print("설정된 세션 이름 userID : " + user_id + "<br />"); //admin
out.print("설정된 세션 이름 userPW : " + user_pw + "<br />"); //java
out.print("설정된 세션 이름 userHP : " + user_hp + "<br />"); //010-123-1234
//잘 안씀
session.removeAttribute("userHP");
%>
<h4>-----세션 삭제 후-----</h4>
<%//스크립틀릿
user_id = (String)session.getAttribute("userID"); //null
user_pw = (String)session.getAttribute("userPW"); //java
user_hp = (String)session.getAttribute("userHP"); //java
out.print("설정된 세션 이름 userID : " + user_id + "<br />"); //null
out.print("설정된 세션 이름 userPW : " + user_pw + "<br />"); //java
out.print("설정된 세션 이름 userHP : " + user_hp + "<br />"); //010-123-1234
%>
</body>
</html>
Enumeration을 이용해서 한번에 꺼내오기
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<!-- session01.jsp와 session01_process.jsp를 먼저 수행 후 -->
<h4>-----세션 삭제 전-----</h4>
<%//스크립틀릿
String name = "";
String value = "";
Enumeration en = session.getAttributeNames(); //userID, userPW, userHP
while(en.hasMoreElements()){
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.print("설정된 세션 이름 " + name + " : " + value + "<br />"); //
}
//잘 안씀
// session.removeAttribute("userHP");
//******
//로그아웃 : 세션의 모든 속성명 제거
session.invalidate();
%>
<h4>-----세션 삭제 후-----</h4>
<%//스크립틀릿
en = session.getAttributeNames();
while(en.hasMoreElements()){
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.print("설정된 세션 이름 " + name + " : " + value + "<br />"); //
}
%>
</body>
</html>
모든 세션 삭제하기
- session.invalidate()
** 5초 뒤에 다시 session01.jsp로 보내기 setTimeout()
session 유효 시간
- 기본 시간은 30분으로 설정되어 있음
- session.getMaxInactiveInterval() 으로 설정한다.
<session07.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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(3600초 : 1시간)으로 설정
session.setMaxInactiveInterval(60*60); // 3600초
time = session.getMaxInactiveInterval();
out.print("<p>세션 유효 시간 : " + time + "초</p>");
%>
</body>
</html>
- session.getId()
- session.getLastAccessedTime();
- session.getCreationTime()
<session08.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Session</title>
</head>
<body>
<%
String session_id = session.getId();
// 새로고침할 때마다 변함
long last_time = session.getLastAccessedTime();
// 세션이 생성된 시간은 새로고침 해도 변하지 않음
// 웹브라우저 모두 닫고 다시 열어야 변함
long start_time = session.getCreationTime();
// 1970년 1월 1일 0시 0분 0초부터 현재 세션이 생성딘 시간까지 경과한 시간을
// 1/1000초 값으로 반환
// start_time = start_time * 1000;//초
long used_time = (last_time - start_time)/6000;
%>
<p>세션 아이디 : <%=session_id %></p>
<p>요청 마지막 시간 : <%=last_time %></p>
<p>요청 시작 시간 : <%=start_time %></p>
<p>웹 사이트에 머문 시간 : <%=used_time %></p>
</body>
</html>
'WEB > JSP' 카테고리의 다른 글
JSP 28 - 쿠키(Cookie) (0) | 2023.01.18 |
---|---|
JSP 27 - 쇼핑몰 사이트 만들기(10) [장바구니 - (session 활용)] (0) | 2023.01.17 |
JSP 25 - 쇼핑몰 사이트 만들기(9) ( LogFilter 적용) (0) | 2023.01.17 |
JSP 24 - 필터 (filter) (0) | 2023.01.16 |
JSP 22 - 쇼핑몰 만들기(8) (예외 처리 하기) (0) | 2023.01.13 |
Comments