[JSP] 게시판 만들기 - 회원 세션 관리

2024. 8. 21. 20:35·프로젝트

[작성일: 2023. 04. 14]

 

접속한 회원 세션 관리하기

세션이란 기본적으로 현재 접속한 회원에게 할당해 주는 고유의 ID이다.

우리의 웹서버는 한 명의 회원 세션 ID로 구분할 수 있다.

따라서, 로그인에 성공했을 때 세션 ID를 부여해 주는 것으로부터 세션 관리가 시작된다고 할 수 있다.

 

먼저 loginAction 페이지와 joinAction 페이지에 각각 로그인에 성공한 회원에게 세션을 부여해주는 코드를 작성한다.

부여된 세션을 해지하는 페이지는 logoutAction 페이지가 수행하게 될 것이다. 

 

로그인을 한 회원들은 세션 ID를 이미 부여받았기 때문에 이를 이용해서 로그인 여부를 확인할 수 있다.

로그인이 된 회원은 회원가입 페이지와 로그인 페이지에 접속할 수 없도록 코드를 작성한다.

index 페이지 또한 로그인 페이지가 아닌 main 페이지로 이동할 수 있도록 코드를 수정한다.

 

세션 관리는 보안에 있어 가장 중요한 요소이기 때문에 반드시 숙지할 필요가 있다.

 

 

 

[소스코드_회원 세션 관리]

#joinAction.jsp 코드 수정

  • 회원가입이 성공적으로 된 회원에게 세션 부여하고 main 페이지로 이동할 수 있도록 코드 추가
  • 이미 로그인 된 회원은 다시 로그인할 수 없도록 코드 추가
<%@ 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"); %>
   <!-- 건너오는 모든 데이터를 UTF-8로 받기 위함. -->
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<!-- 로그인페이지에서 넘겨준 userId를 받아 한 명의 사용자 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 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>");
		}
		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>

 

 

#loginAction.jsp 코드 수정

  • session.setAttribute 코드를  추가하여 로그인에 성공한 회원에게 세션을 부여하는 코드 추가
  • 세션 ID를 통해 로그인 여부를 확인할 수 있도록 수정
<%@ 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"); %>
   <!-- 건너오는 모든 데이터를 UTF-8로 받기 위함. -->
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<!-- 로그인페이지에서 넘겨준 userId를 받아 한 명의 사용자 userId에 넣어줌. -->
<jsp:setProperty name="user" property="userPassword" />
<!DOCTYPE html>
<html>
<head>
<meta 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'"); // 로그인에 성공했을 때 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"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>   <!-- 자바스크립트 문장을 작성하기 위함. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		session.invalidate();  
		// 해당 페이지에 접속한 회원은 세션을 빼앗기게 된다.
	%>
	
	<script>
		location.href = 'main.jsp';
	</script>
</body>
</html>

 

 

#index.jsp 수정

  • 웹 페이지에 처음 접속한 사람들이 index 페이지가 아닌 main 페이지로 이동할 수 있도록 수정
<%@ 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>
		location.href = 'main.jsp';
	</script>
</body>
</html>

 

 

#main.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">  <!-- 모바일 상태에서 오른쪽에 메뉴가 나옴. -->
			
			<!-- 오른쪽 메뉴 바에서 선 3개 -->
				<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 src="//code.jquery.com/jquery-3.6.4.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>

 

 

 

[실행화면_회원 세션 관리]

새로고침을 하여 main페이지를 확인하면 문제없이 로그인과 회원가입 메뉴가 뜨는 걸 볼 수 있다.

현재는 로그인이 되어있지 않아 메뉴 이름이 접속하기로 보인다.

 

 

 

회원가입 페이지로 이동하여 회원가입을 시도한 후 화면이 어떻게 변하는지 보았다.

user1이라는 아이디를 만들어 가입했더니 바로 로그인이 되면서 접속하기가 사라지고 로그아웃이 뜨는 것을 볼 수 있다.

 

 

다시 로그아웃을 누르면 회원관리 메뉴가 사라지고 로그인 및 회원가입이 뜬다.

그리고 회원가입 페이지에 들어가면 로그인에 파란 불빛 표시가 되어있는 것을 확인할 수 있는데 이건 join 페이지에서 로그인 말고 회원가입의 li에 class="active"를 넣어주면 바꿀 수 있다.

 

 

 

#코드 수정 전

 

#코드 수정 후

코드를 이렇게 수정하면 된다.

 

 

 

이 부분은 자바스크립트를 사용해서 더 active 하게 수정할 수 있을 거 같은데 나중에 다시 알아보고 수정할 예정이다.

 

 

 

 

 

 

 

 

 

 


🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

🐣 출처: https://youtu.be/eJRB__ErXd4

 

저작자표시 비영리 변경금지 (새창열림)
'프로젝트' 카테고리의 다른 글
  • [JSP] 게시판 만들기 - 글쓰기 기능 구현
  • [JSP] 게시판 만들기 - 게시판 메인 페이지 디자인, 게시판 데이터베이스 구축
  • [JSP] 게시판 만들기 - 회원가입 페이지 디자인, 회원가입 기능 구현
  • [JSP] 게시판 만들기 - 로그인 기능 구현
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    생성자
    자바스크립트
    최주호
    Security
    객체
    성능최적화
    html
    게시판만들기
    JPA
    Swift
    MVC
    DB
    변수
    데이터베이스
    HTTP
    spring
    javascript
    자바
    Spring Security
    프로그래머스
    Database
    Java
    sql
    스프링
    jsp
    다형성
    백준
    김영한
    알고리즘
    의존성주입
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JSP] 게시판 만들기 - 회원 세션 관리
상단으로

티스토리툴바