WebServer/JSP&Servlet

[JSP&Servlet] 쿠키를 이용한 간단한 로그인&로그아웃

gangintheremark 2023. 8. 21. 18:02
728x90

쿠키(Cookie)란?

  • 클라이언트가 서버에 정보를 요청할 때 생성되는 상태정보
  • 클라이언트에 데이터 저장

로그인 폼

LoginServlet.java

package com.servlet;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 로그인 폼에서 전송되는 아이디와 비밀번호 입력하기
        String userid = request.getParameter("userid");
        String passwd = request.getParameter("passwd");

        // 2. DB에서 회원의 아이디 및 비밀번호 일치 여부 확인 (인증되었다고 가정)

        // 3. 쿠키 생성 및 로그인 정보 저장
        Cookie c = new Cookie("user", userid);

        // 4. 쿠키 응답
        response.addCookie(c);


        // 5. 로그인 성공 후 응답처리
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
         out.print("<html><head>");
         out.print("<meta charset=\"UTF-8\">");
         out.print("<title>Insert title here</title>");
         out.print("</head>");
         out.print("<body>");

         out.print("<h1>로그인성공</h1>");         
         out.print("안녕하세요. " + userid +"님");         
         out.print("<a href='mypage'>mypage</>");         

         out.print("</body></html>");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }
}

MyPageServlet.java

package com.servlet;

@WebServlet("/mypage")
public class MyPageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 쿠키 얻기. (최대 300개)
        Cookie[] cookies = request.getCookies();

        String id = null;
        Cookie xxx = null;

        // 쿠키의 특정 회원 정보 얻기
        for(Cookie c : cookies) {
            if("user".equals(c.getName())) {
                id = c.getValue();
                xxx = c;
            }
        }


        if(id != null) {
            // 로그인 한 경우로서 응답처리
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
             out.print("<html><head>");
             out.print("<meta charset=\"UTF-8\">");
             out.print("<title>Insert title here</title>");
             out.print("</head>");
             out.print("<body>");
             out.print("<h1>mypage</h1>");         
             out.print("안녕하세요. " + id +"님");         
             out.print("<a href='logout'>로그아웃</>");         

             out.print("</body></html>");
        }else {
            // id값이 null이면 로그인을 안한 경우 또는 했는데 time-out 
            response.sendRedirect("loginForm.jsp");
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


LogoutServlet.java

package com.servlet;

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //쿠키얻기 , 최대 300개
        Cookie [] cookies = request.getCookies();

        //로그인 정보 얻기
        String id = null;
        Cookie xxx = null;
        for(Cookie c: cookies) {
            if("user".equals(c.getName())) {
                 id = c.getValue();
                 xxx = c;
            }
        }
        // 로그인 유무 확인
        if(id!=null) {
            xxx.setMaxAge(0); // 쿠키 삭제
            response.addCookie(xxx);
            // 로그아웃 이후의 화면 선택
            response.sendRedirect("loginForm.jsp");
        }else {
            response.sendRedirect("loginForm.jsp");
        }

    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

 

728x90