모든지 기록하자!

간단한 웹사이트 만들기(DB, JSP, BootStrap) 06 - 접속한 회원 세션 관리하기 본문

Web/기본 website만들기

간단한 웹사이트 만들기(DB, JSP, BootStrap) 06 - 접속한 회원 세션 관리하기

홍크 2021. 6. 18. 00:01
728x90

세션관리

세션이란 기본적으로 현재 접속한 회원에 할당해주는 고유의 아이디 이다. 웹서버는 한명의 회원을 세션 아이디로 구분할 수 있다.

따라서 로그인에 성공했을 때 세션아이디를 부여해줘서 세션관리를 할 수 있다.

 

loginAction.jsp 페이지와 joinAction.jsp 페이지에 각각 세션을 부여해주자

 

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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<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("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>

joinAction.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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		String userID = null; //로그인이 된 유저는 로그인과 회원가입 페이지에 들어갈 수 없게 처리해준다.
		if(session.getAttribute("userID") != null){
			userID = (String)session.getAttribute("userID");
		}
		if(userID != null){ //userID가 null이 아닌경우 출력문을 출력후에 main.jsp 파일로 이동시킨다.
			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){
				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>

세션을 확인해서 userID라는 이름으로 세션이 존재하는 회원들은 userID에 해당 세션 값을 넣어준다.

userID라는 변수가 자신에게 할당된 세션 아이디를 담을수 있게 만들어준다.

userID가 null이 아닌경우 출력문을 출력후에 main.jsp 파일로 이동시킨다.

loginAction페이지와 joinAction페이지에 동일하게 처리해서 로그인이 된 유저는 로그인과 회원가입 페이지에 들어갈 수 없게 처리해준다.

위와 같이 부여된 세션을 할당 해제해주는 건 logout페이지 이다. logoutAction.jsp 파일을 만들어준다.

 

logoutAction.jsp 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		session.invalidate(); // 세션을 뺏겨 로그아웃 시켜준다.
	%>	
	<script type="text/javascript">
		location.href = 'main.jsp';   <!-- 로그아웃후 main.jsp로 이동시켜준다. -->
	</script>
</body>
</html>

 

index.jsp 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<script type="text/javascript">
		location.href = "main.jsp";
	</script>
</body>
</html>

index페이지를 main.jsp로 이동시키도록 만들어 준다. 즉 웹사이트에 처음 접속한 사람들은 main페이지로 이동한다.

 

login.jsp 페이지를 복사해서 main.jsp 페이지를 만들어준다.

 

login.jsp 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		String userID = null;
		if(session.getAttribute("userID") != null){
			userID = (String) session.getAttribute("userID");
		}
	%>
	<nav class="navbar navbar-default">
		<div class="navbar-header">
			<button type="button" class="navbar-toggle collapsed"
				data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
				aria-expanded="false">
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</button>
			<a class="navbar-brand" href="main.jsp">JSP 게시판 웹사이트</a>
		</div>
		<div class="collapse navbar-collapse" id="#bs-example-navbar-collapse-1">
			<ul class="nav navbar-nav">
				<li class="active"><a href="main.jsp">메인</a></li>
				<li><a href="bbs.jsp">게시판</a></li>
			</ul>
			<%
				if(userID == null){  // 로그인이 되어있지 않다면 회원가입이나 로그인을 할수 있게 만들어준다.
			%>
			<ul class="nav navbar-nav navbar-right">
			 	<li class="dropdown">
			 		<a href="#" class="dropdown-toggle"
			 			data-toggle="dropdown" role="button" aria-haspopup="true"
			 			aria-expanded="false">접속하기<span class="caret"></span></a>
			 		<ul class="dropdown-menu">
			 			<li><a href="login.jsp">로그인</a></li>
			 			<li><a href="join.jsp">회원가입</a></li>
			 		</ul>
			 	</li>
			</ul>
			<%
				}else{
			%>
			<ul class="nav navbar-nav navbar-right">
			 	<li class="dropdown">
			 		<a href="#" class="dropdown-toggle"
			 			data-toggle="dropdown" role="button" aria-haspopup="true"
			 			aria-expanded="false">회원관리<span class="caret"></span></a>
			 		<ul class="dropdown-menu">
			 			<li><a href="logoutAction.jsp">로그아웃</a></li>
			 		</ul>
			 	</li>
			</ul>				
			<%
				}
			%>
		</div>
	</nav>
	<script type="text/javascript" src="//code.jquery.com/jquery-3.4.1.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>

위와 같이 로그인이 되어있지 않다면 회원가입이나 로그인을 할수 있게 만들어준다.

로그인이 되어있으면 회원관리만 보이게하고 로그아웃 버튼을 만들어준다.

728x90
Comments