[JSP] 세션 관리

박은지·2022년 3월 7일
0

세션 (Session)

세션 (Session)

세션(Session)은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.
세션은 정보를 유지하기 위해 javax.servlet.http의 HttpSession 인터페이스를 읽어서 사용한다.

쿠키(Cookie)는 웹 브라우저에 사용자의 상태를 유지하기 위한 정보를 저장한다.
쿠키는 정보를 브라우저에 저장해서 웹 서버가 쿠키 정보를 읽어서 사용한다.

세션 메소드

getAttribute(String name)

  • 리턴 타입 : java.lang.Object
  • 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없을 경우에는 null 값을 리턴한다.

getAttributeNames()

  • 리턴 타입 : java.util.Enumeration
  • 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다.

getCreationTime()

  • 리턴 타입 : long
  • 1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다.

getId()

  • 리턴 타입 : java.lang.String
  • 세션에 할당된 고유 식별자를 String 타입으로 리턴한다.

getMaxInactiveInterval()

  • 리턴 타입 : int
  • 현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다.

invalidate()

  • 리턴 타입 : void
  • 현재 생성된 세션을 무효화 시킨다.

removeAttribute(String.name)

  • 리턴 타입 : void
  • 세션 속성명이 name인 속성을 제거한다.

setAttribute(String name, Object value)

  • 리턴 타입 : void
  • 세션 속성명이 name인 속성에 속성값으로 value를 할당한다.

setMaxInactiveInterval(int interval)

  • 리턴 타입 : void
  • 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다.

자주 사용되는 메소드 정리..

💡 세션 값 설정하기

session.setAttribute("설정한_세션_아이디", 세션에_넣을_값);

// 예시
session.setAttribute("user_id", user_id);

💡 세션 유지시간 설정하기 (초 단위)

// 60*30 = 30분   [참고] 60*60 = 60분
session.setMaxInactiveInterval(30*60);

// 세션의 시간 무한대로 설정
session.setMaxInactiveInterval(-1);

💡 세션에 저장된 값 가져오기

session.getAttribute("user_id");

💡 세션 값 삭제

// 특정 세션 값 삭제
session.removeAttribute("user_id"); 

// 전체 세션 값 삭제
session.invalidate();

loginAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>

<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />

<!DOCTYPE html>
<html>
<!-- HEAD -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<!-- BODY -->
<body>
	<%
	    // 이미 로그인 상태인 사람은 또다시 로그인하지 못하도록
	    String userID = null;
		if (session.getAttribute("userID") != null) {
			userID = (String) session.getAttribute("userID");
		}
		if (userID != null) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('이미 로그인 상태입니다.')");
			script.println("location.href = 'main.jsp'");
			script.println("</script>");
		}
	
		UserDAO userDAO = new UserDAO();  // 데이터베이스 접근 객체
		int result = userDAO.login(user.getUserID(), user.getUserPassword());
		if (result == 1) {
			session.setAttribute("userID", user.getUserID());  // 세션 관리
			
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('로그인 성공!')"); //
			script.println("location.href = 'main.jsp'");
			script.println("</script>");
		}
		else if (result == 0) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('비밀번호가 틀렸습니다.')");
			script.println("history.back()");
			script.println("</script>");
		}
		else if (result == -1) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('존재하지 않는 아이디입니다.')");
			script.println("history.back()");
			script.println("</script>");
		}
		else if (result == -2) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('데이터베이스 오류가 발생했습니다.')");
			script.println("history.back()");
			script.println("</script>");
		}
	%>
    
</body>
</html>

logoutAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<!-- HEAD -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<!-- BODY -->
<body>
	<%
		// 세션 전체 제거, 무효화
		session.invalidate();
	%>
	<script>
		location.href= 'main.jsp';
	</script>
</body>
</html>

join.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>

<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<jsp:setProperty name="user" property="userName" />
<jsp:setProperty name="user" property="userGender" />
<jsp:setProperty name="user" property="userEmail" />

<!DOCTYPE html>
<html>
<!-- HEAD -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<!-- BODY -->
<body>	
	<%
	    // 이미 로그인 상태인 사람은 회원가입 페이지에 접속하지 못하도록
		String userID = null;
		if (session.getAttribute("userID") != null) {
			userID = (String) session.getAttribute("userID");
		}
		if (userID != null) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('이미 로그인 상태입니다.')");
			script.println("location.href = 'main.jsp'");
			script.println("</script>");
		}
	
		// 입력하지 않은 항목이 있을 경우
	    if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null || 
	        user.getUserGender() == null || user.getUserEmail() == null) {
	    	PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('입력해야하는 항목이 남아있습니다.')");
			script.println("history.back()");
			script.println("</script>");
	    } else {
	    	
	    	UserDAO userDAO = new UserDAO(); // 데이터베이스에 접근할 수 있는 객체
	    	
	    	int result = userDAO.join(user);
	    	
	    	
	    	if (result == -1) {  // 동일한 ID를 입력했을 경우 데이터베이스에서 오류 발생 (userID는 고유한 기본키 PK)
	    		PrintWriter script = response.getWriter();
				script.println("<script>");
				script.println("alert('이미 존재하는 아이디입니다.')");
				script.println("history.back()");
				script.println("</script>");
	    	} else {  // 회원가입이 정상적으로 이루어진 경우
	    		session.setAttribute("userID", user.getUserID());  // 세션 관리
	    		
	    		PrintWriter script = response.getWriter();
				script.println("<script>");
				script.println("location.href='main.jsp'");
				script.println("</script>");
	    	}
	    }

	%>
    
</body>
</html>

0개의 댓글