국비 57 - 회원 탈퇴

냐아암·2023년 8월 7일
0

국비

목록 보기
73/114

회원 탈퇴

<li><a href="${contextPath}/member/myPage/secession">회원 탈퇴</a></li>
@WebServlet("/member/myPage/secession")
public class MyPageSecessionServlet extends HttpServlet {
	
	
	// 회원 탈퇴 페이지로 전환
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String path = "/WEB-INF/views/member/myPage-secession.jsp";
		req.getRequestDispatcher(path).forward(req, resp);
	}

회원 탈퇴 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 문자열 관련 함수(메소드) 제공 JSTL (EL 형식으로 작성) -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My page</title>

<link rel="stylesheet" href="${contextPath}/resources/css/main-style.css">
<link rel="stylesheet" href="${contextPath}/resources/css/myPage-style.css">

<script src="https://kit.fontawesome.com/8f020b2fa9.js"
   crossorigin="anonymous"></script>
</head>
<body>

   <main>
     <jsp:include page="/WEB-INF/views/common/header.jsp"></jsp:include>
      <!-- 마이페이지 - 내 정보 -->
      <section class="myPage-content">

		<!-- 사이드메뉴 include -->
        <jsp:include page="/WEB-INF/views/member/sideMenu.jsp"></jsp:include>
        
        <!-- 오른쪽 마이페이지 주요 내용 -->
        <section class="myPage-main">
            <h1 class="myPage-title">회원 탈퇴</h1>
            <span class="myPage-explanation">현재 비밀번호가 일치하는 경우 탈퇴할 수 있습니다.</span>

            <form action="secession" method="POST" name="myPage-form" onsubmit="return secessionValidate()">

                <div class="myPage-row">
                    <label>비밀번호</label>
                    <input type="password" name="memberPw" maxlength="30">
                </div>

                <div class="myPage-row info-title">
                    <label>회원 탈퇴 약관</label>
                </div>

                <pre id="secession-terms">
제1조
이 약관은 샘플 약관입니다.

① 약관 내용 1

② 약관 내용 2

③ 약관 내용 3

④ 약관 내용 4


제2조
이 약관은 샘플 약관입니다.

① 약관 내용 1

② 약관 내용 2

③ 약관 내용 3

④ 약관 내용 4
                </pre>

                <div>
                    <input type="checkbox" name="agree" id="agree">
                    <label for="agree">위 약관에 동의합니다.</label>
                </div>


                
                <button id="info-update-btn">탈퇴</button>
            </form>
        </section>

      </section>  

   </main>

   <jsp:include page="/WEB-INF/views/common/footer.jsp"></jsp:include>

   <script src="${contextPath}/resources/js/member/myPage.js"></script>

</body>
</html>
@WebServlet("/member/myPage/secession")
// 회원 탈퇴
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		// 파라미터
		String memberPw = req.getParameter("memberPw");
		
		// 회원번호
		HttpSession session = req.getSession(); // 세션 얻어오기
		
		Member loginMember = (Member)(session.getAttribute("loginMember"));
		
		int memberNo = loginMember.getMemberNo();
		
		try {
			
			MemberService service = new MemberService();
			
			int result = service.secession(memberPw, memberNo);
			
			String path = null; // 리다이렉트 경로
			
			if(result > 0) {
				// 로그아웃 방법 1
				// path = req.getContextPath() + "/member/logout"; // 로그아웃 요청으로 리다이렉트
				
				//+)
				// session.removeAttribute("loginMember"); // 회원정보만 없앰
				
				// 로그아웃 방법 2
				session.invalidate(); // 세션 무효화
				// -> 세션을 무효화해버려서 메세지 전달이 되지 않는 문제가 발생
				
				// [해결방법]
				// 새로운 세션을 얻어와서 메세지 세팅
				session = req.getSession(); // 무효화 후 새로 생성된 세션 얻어오기
				
				session.setAttribute("message", "탈퇴 완료");
				
				path = req.getContextPath(); // 메인 페이지
				
				Cookie c = new Cookie("saveId", ""); // 쿠키 생성
				c.setMaxAge(0); // 쿠키 수명
				c.setPath(req.getContextPath()); // 쿠키를 적용할 경로
				resp.addCookie(c); // 쿠키를 클라이언트에게 전송
				
				
			} else {
				session.setAttribute("message", "비밀번호가 일치하지 않습니다.");
				
				// 절대경로
				//path=req.getContextPath() + "/member/myPage/secession";
				
				// 상대경로
				path="secession";
			}
			
			resp.sendRedirect(path);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

/** 회원 탈퇴 service
	 * @param memberPw
	 * @param memberNo
	 * @return result
	 * @throws Exception
	 */
	public int secession(String memberPw, int memberNo) throws Exception {
		
		Connection conn = getConnection();
		
		int result = dao.secession(conn, memberPw , memberNo);
		
		if(result>0) commit(conn);
		else		 rollback(conn);
		
		close(conn);
		
		return result;
	}

/** 회원 탈퇴 DAO
	 * @param conn
	 * @param memberPw
	 * @param memberNo
	 * @return result
	 * @throws Exception
	 */
	public int secession(Connection conn, String memberPw, int memberNo) throws Exception {
		
		int result = 0;
		
		try {
			
			String sql = prop.getProperty("secession");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, memberNo);
			pstmt.setString(2, memberPw);
			
			result = pstmt.executeUpdate();
			
		} finally {
			close(pstmt);
		}
				
		return result;
	}
<!-- 회원탈퇴 -->
	<entry key="secession">
		UPDATE MEMBER SET
		SECESSION_FL='Y'
		WHERE MEMBER_NO=?
		AND MEMBER_PW = ?
	</entry>
profile
개발 일지

0개의 댓글