Jsp-07.cookie

이현주·2023년 10월 2일
0

JSP

목록 보기
7/11

아이디 기억하기 구현

체크박스의 입력값이 있다면,
쿠키객체를 생성하고
setMaxAge()메서드로 쿠키를 유지할 시간을 세팅한다.
아니라면 같은이름의 쿠키객체를 선언하여 setMaxAge()를 0으로 설정하여 초기화 한다.

[RememberMe.java]

package ex07_cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RememberMe
 */
@WebServlet("/rememberMe")
public class RememberMe extends HttpServlet {
  private static final long serialVersionUID = 1L;
       
  /**
   * @see HttpServlet#HttpServlet()
   */
  public RememberMe() {
    super();
    // TODO Auto-generated constructor stub
  }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // 요청 인코딩
    request.setCharacterEncoding("UTF-8");
    
    // 요청 파라미터 (id, remember_me)
    String id = request.getParameter("id");                    // 입력 상자의 입력이 없으면 빈 문자열("")
    String remember_me = request.getParameter("remember_me");  // checkbox의 체크가 없으면 null
    
    // 아이디 기억하기 체크했다면 쿠키에 id를 저장한다.
    Cookie cookie = null;
    if(remember_me != null) {  // if(remember_me.equals("on")){ 과 동일함
      cookie = new Cookie("remember_me", id);
      cookie.setMaxAge(60 * 60 * 24 * 15);  // 15일간 쿠키 유지
    } else {
      cookie = new Cookie("remember_me", "");
      cookie.setMaxAge(0);                  // 쿠키 삭제를 위해 0초간 쿠키 유지
    }
    
    // 쿠키는 클라이언트에게 전달한다. (쿠키는 클라이언트가 저장한다.)
    response.addCookie(cookie);
    
    // main 화면으로 돌아가기
    response.sendRedirect(request.getContextPath() + "/ex07_cookie/main.jsp");
    
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }

}

[main.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>

  <%
    String remember_me = "";  // 쿠키 remember_me가 없으면 빈 문자열("")을 사용하기 위해서 초기화를 진행함
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
      for(int i = 0; i < cookies.length; i++){
        if(cookies[i].getName().equals("remember_me")){
          remember_me = cookies[i].getValue();
          break;
        }
      }
    }
    pageContext.setAttribute("remember_me", remember_me);
  %>

  <div>
    <form method="post" action="${contextPath}/rememberMe">
      <div>
        <label for="id">아이디</label>
        <input type="text" name="id" id="id">
      </div>
      <div>
        <label for="pw">비밀번호</label>
        <input type="password" name="pw" id="pw">
      </div>
      <div>
        <button type="submit">로그인</button>
      </div>
      <div>
        <input type="checkbox" id="remember_me" name="remember_me">
        <label for="remember_me">아이디 기억</label>
      </div>
    </form>
  </div>
  <script>
    if('${remember_me}' !== ''){
      $('#id').val('${remember_me}');
      $('#remember_me').prop('checked', true);
    }
  </script>

</body>
</html>



profile
졸려요

0개의 댓글