Jam's story
[JSP] 세션 본문
- 상태관리
- 쿠키와 다른점은 서버상태관리
- 인증/권한을 대부분 세션을 사용해서 상태관리
- [웹 컨테이너] 는 기본적으로 하나의 웹 브라우저마다 하나의 세션 (저장공간) 을 생성
- 세션생성
- 세션제거 (종료)
- 더 이상 요청이 없으면 세션 제거 (일정시간 (20분 후) 지난 후)
- 메서드를 통해서 강제 세션 제거
예) 홍길동 SS 수강신청 / 수료
- [캐비넷] + 열쇠 (암호키 세션 ID) == 세션 (정보저장)
page 태그의 session 속성의 기본값은 true 이다.
session HttpSession 의 기본객체이므로 선언할 필요가 없다.
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.
ex04.jsp
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 22.-오전 11:57:43</title>
</head>
<body>
<h3></h3>
<pre>
상태관리
쿠키와 다른점은 서버상태관리
인증/권한을 대부분 세션을 사용해서 상태관리
[웹 컨테이너] 는 기본적으로 하나의 웹 브라우저마다 하나의 세션 (저장공간) 을 생성
세션생성
세션제거 (종료)
더 이상 요청이 없으면 세션 제거 (일정시간 (20분 후) 지난 후)
메서드를 통해서 강제 세션 제거
예) 홍길동 SS 수강신청 / 수료
[캐비넷] + 열쇠 (암호키 세션 ID) == 세션 (정보저장)
</pre>
<%-- <%
/* 세션 - 인증/권한/장바구니 데이터 저장
jsp 9가지 기본 객체 중에 HttpSession session
session.setAttribute("" , );
String logonID=(String)session.getAttribute("auth"); */
String sid = session.getId();
long ms = session.getCreationTime(); // 1970.1.1 ~
long lastms = session.getLastAccessedTime();
%> --%>
<%
String sid = session.getId();
long ms = session.getCreationTime(); // 1970.1.1 ~
long lastms = session.getLastAccessedTime();
%>
session id = <%=sid%> <br />
session CreationTime = <%=ms %>ms <br />
<%
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date d = new Date();
d.setTime(ms);
%>
session CreationTime = <%=sdf.format(d) %> <br />
<%
d.setTime(lastms);
%>
session LastAccessedTime = <%=sdf.format(d) %> <br />
</body>
</html>
ex05.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 3:09:38</title>
</head>
<body>
<h3></h3>
<%
pageContext.setAttribute("job", "CLERK"); //page scope 해당 페이지에서 사용가능
session.setAttribute("deptno",10);
request.setAttribute("empno",7369);
application.setAttribute("dbcp", "oracle");
%>
job:<%=pageContext.getAttribute("job") %>
deptno: <%=session.getAttribute("deptno") %>
empno:<%=request.getAttribute("empno") %>
dbcp:<%=application.getAttribute("dbcp") %>
<a href="ex05_02.jsp">ex05_02.jsp</a>
<a href="ex05.htm">서블릿 호출 Ex05_Session.java</a>
</body>
</html>
세션은 언제종료하는지 ?
-웹 브라우저를 종료(닫기)
-브라우저가 열려져 있는 상태에서 클릭을 해서 이동한 적이 없다. (요청하고 응답하는 것 x ) -> 자동종료
web.xml
<session-config>
<!-- 단위 : 분 -->
<session-timeout>50</session-timeout>
</session-config>
단위는 분이고, 0으로 설정한다면 ㅡ> 세션을 강제로 종료하기전까지 사용하겠다.
서블릿
jsp 페이지에서 세션을 사용하는 방법 ? jsp기본객체 session
서블릿에서 세션을 사용하는 방법 ? request.getSession()메서드
차이점
request.getSession(); 세션이존재하지 않으면 새로운 세션 객체를 생성해서 반환
request.getSession(false); 세션이 존재하지 않으면 null반환
서블릿
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget호출");
//jsp 페이지에서 세션을 사용하는 방법 ? jsp기본객체 session
//서블릿에서 세션을 사용하는 방법 ? request.getSession()메서드
//차이점
//request.getSession(); 세션이존재하지 않으면 새로운 세션 객체를 생성해서 반환
//,request.getSession(false); 세션이 존재하지 않으면 null반환
HttpSession session = request.getSession(false);
if (session != null) {
int deptno = (int) session.getAttribute("deptno");
System.out.println(deptno);
} else {
System.out.println("X");
}
}
ex05_02.jsp
job : <%= pageContext.getAttribute("job") %><br>
deptno : <%= session.getAttribute("deptno") %><br>
empno : <%= request.getAttribute("empno") %><br> <!-- 포워딩 되는게 아니므로 유지 안된다. -->
dbcp : <%= application.getAttribute("dbcp") %><br>
ex06_auth.jspf
<%@page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//[ex06_auth.jspf]
String sname = "auth";
String logonID = null;
//auth 세션명의 세션값을 얻어오는 코딩
logonID = (String) session.getAttribute(sname);
%>
세션으로 로그인 관리
ex06_default.jsp
<%@ page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file="ex06_auth.jspf" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2022. 6. 22.-오전 10:14:48</title>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
div{
border: 1px solid gray;
width:300px;
height:100px;
padding:20px;
}
</style>
</head>
<body>
<h3>ex06_default.jsp - 메인페이지</h3>
<%
if(logonID == null){//로그인(인증)X
%>
<div id="logon">
<form action="ex06_logon.jsp">
아이디 : <input type="text" name="id" value="admin" /><br>
비밀번호 : <input type="password" name="passwd" value="1234" /><br>
<input type="submit" value="로그인" />
<input type="button" value="회원가입" />
<!-- ?error -->
<%
String error = request.getParameter("error");
if ( error != null ){
%>
<span style="color:red">로그인 실패했습니다.</span>
<%
}
%>
<script>
$(function(){
$("#logon span").fadeOut(5000);
})
</script>
</form>
</div>
<%
}else{ //로그인(인증) 했다.
%>
<div id="logout">
[<%=logonID %>]님 환영합니다.<br>
<a href="ex06_logout.jsp">로그아웃</a>
</div>
<%
}
%>
<!-- 로그인을 하지 않아도 모두가 사용하는 메뉴 -->
<a href="/jspPro/cstvsboard/list.htm">게시판</a><br>
<a href="#">공지사항</a>
<!-- 반드시 로그인(인증)을 해야지 사용하는 메뉴 -->
<%
if(logonID != null){
%>
<a href="#">일정관리</a><br>
<a href="#">자료실</a><br>
<%
}
%>
<!-- 인증 + 권한(관리자) -->
<%
if(logonID != null && logonID.equals("admin")){
%>
<a href="#">급여관리</a><br>
<a href="#">사원관리</a><br>
<%
}
%>
</body>
</html>
ex06_logon.jsp
<%@page import="com.util.Cookies"%>
<%@page import="java.util.HashMap"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
HashMap<String, String> member = new HashMap<>();
member.put("admin","1234"); // 관리자
member.put("hong","1234"); // 일반회원
member.put("park","1234"); // 일반회원
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
if( id.equals("admin") && passwd.equals("1234") ) {
session.setAttribute("auth", id);
response.sendRedirect("ex02_default.jsp");
}else if( id.equals("hong") && passwd.equals("1234") ) {
session.setAttribute("auth", id);
response.sendRedirect("ex02_default.jsp");
}else if( id.equals("park") && passwd.equals("1234") ) {
session.setAttribute("auth", id);
response.sendRedirect("ex02_default.jsp");
}else{
response.sendRedirect("ex02_default.jsp?error"); // 로그인 실패했을 때 ? error
}
%>
ex06_logout.jsp
<%@page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="ex06_auth.jspf" %>
<%
//세션 자동 삭제
//세션 강제 삭제
session.invalidate();
// ex06_default.jsp 이동
%>
<script>
alert("[<%= logonID%>]님 로그아웃 하셨습니다.")
location.href = "ex06_default.jsp";
</script>
ex06_defualt_jstl.jsp
<%@ page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file="ex06_auth.jspf" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2022. 6. 22.-오전 10:14:48</title>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
div{
border: 1px solid gray;
width:300px;
height:100px;
padding:20px;
}
</style>
</head>
<body>
<h3>ex06_default_EL_JSTL.jsp - 메인페이지</h3>
<c:if test="${ empty logonID }">
<div id="logon">
<form action="ex06_logon.jsp">
아이디 : <input type="text" name="id" value="admin" /><br>
비밀번호 : <input type="password" name="passwd" value="1234" /><br>
<input type="submit" value="로그인" />
<input type="button" value="회원가입" />
<!-- ?error -->
<c:if test="${ not empty param.error }">
<span style="color:red">로그인 실패했습니다.</span>
</c:if>
<script>
$(function (){
$("#logon span").fadeOut(5000);
})
</script>
</form>
</div>
</c:if>
<c:if test="${ not empty logonID }">
<div id="logout">
[<%= logonID %>]님 환영합니다.<br>
<a href="ex06_logout.jsp">로그아웃</a>
</div>
</c:if>
<!-- 로그인을 하지 않아도 모두가 사용하는 메뉴 -->
<a href="/jspPro/cstvsboard/list.htm">게시판</a><br>
<a href="#">공지사항</a><br>
<!-- 반드시 로그인(인증)을 해야지 사용하는 메뉴 -->
<c:if test="${ not empty logonID }">
<a href="#">일정관리</a><br>
<a href="#">자료실</a><br>
</c:if>
<!--인증 + 권한( 관리자 ) -->
<c:if test="${ logonID eq 'admin' }">
<a href="#">급여관리</a><br>
<a href="#">사원관리</a><br>
</c:if>
</body>
</html>
인증 정보 : auth 세션 저장 -> 읽기
장바구니 정보
권한 정보
기타 여러가지의 정보를 세션 저장
클래스 선언 + 여러 가지 필드(정보) 객체 -> 세션 저장
예) 로그인 ( id,이름, 나이, 주소, 연락처) 정보 => 세션 저장
ex07.jsp
<%
Member member = new Member("admin","관리자",20,"서울시","010-858-5556");
session.setAttribute("user",member);
%>
<h3>세션에서 member 객체인 user를 얻어와서 출력</h3>
<%
Member user = (Member) session.getAttribute("user");
%>
id= <%=user.getId()%><br>
name= <%=user.getName()%><br>
<%-- EL 안에서 세션에 있는 user 객체를 바로 사용할 수 있따 --%>
age= ${user.age}<br>
addr= ${user.addr}><br>
tel= ${user.tel}<br>
'JSP' 카테고리의 다른 글
[JSP] EL을 사용해서 쿠키를 읽고 쓰기 (0) | 2022.06.23 |
---|---|
[JSP] EL (0) | 2022.06.22 |
[JSP] 커넥션풀 (0) | 2022.06.22 |
[JSP] 로그인 화면 (0) | 2022.06.22 |
[JSP] 클라이언트와 대화 - 쿠키 (0) | 2022.06.21 |
Comments