Jam's story

[JSP] 세션 본문

JSP

[JSP] 세션

애플쩀 2022. 6. 22. 15:09
  1. 상태관리
  2. 쿠키와 다른점은 서버상태관리
  3. 인증/권한을 대부분 세션을 사용해서 상태관리
  4. [웹 컨테이너] 는 기본적으로 하나의 웹 브라우저마다 하나의 세션 (저장공간) 을 생성
  5. 세션생성
  6. 세션제거 (종료)
    • 더 이상 요청이 없으면 세션 제거 (일정시간 (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