본문 바로가기
Java/Servlet & JSP

JSP) 아이디 저장 체크 박스 설정/미설정, 쿠키의 종류

by 박채니 2022. 6. 23.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


전체적인 디렉토리 구조 및 클래스 구조는 아래 포스팅 참고!
https://chanychu.tistory.com/308

 

JSP) 웹 페이지 로그인 기능 구현하기

안녕하세요, 코린이의 코딩 학습기 채니 입니다. 개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다. 전체적인 디렉토리 구조는 아래 포스팅 참고! https://chanychu.tistory.com/307?categ

chanychu.tistory.com


아이디 저장 체크 박스 설정

Controller

MemberLoginServlet

// 3. 업무로직 : 로그인 여부 판단
Member member = memberService.findById(memberId);
System.out.println("member@MemberLoginServlet = " + member);

HttpSession session = request.getSession();
System.out.println(session.getId());	// 클라이언트 쪽과 동일

if(member != null && password.equals(member.getPassword())) {
    // 로그인 성공
    session.setAttribute("loginMember", member);

    // saveId 처리
    Cookie cookie = new Cookie("saveId", memberId);
    cookie.setPath(request.getContextPath());	// /mvc2 -> /mvc2로 시작하는 요청 주소에 cookie를 함께 전송
    // session cookie(서버에 접속한 동안만 client에 보관) | persistent cookie(maxAge를 지정한 경우)
    cookie.setMaxAge(7 * 24 * 60 * 60);	// 초단위로 설정 -> 7일
    response.addCookie(cookie);	// 응답메세지에 Set-Cookie 항목으로 전송
} else {
    // 로그인 실패
    session.setAttribute("msg", "아이디 또는 비밀번호가 일치하지 않습니다.");
}

로그인 성공 시 "saveId"의 name과 memberId를 value로 갖는 쿠키를 생성해주었습니다.

해당 쿠키는 setPath() 메소드를 이용하여 '/mvc2'로 시작하는 모든 요청 주소에 cookie를 전송(서버)하도록 세팅해주었습니다. (/mvc2/admin, /mvc2/index ...)

쿠키의 유효기간을 setMaxAge() 메소드를 이용하여 설정해주었고, 초단위로 설정 가능합니다.

응답 시, Set-Cookie 항목으로 생성한 쿠키를 전송해줍니다.

 

header.jsp

<!-- 로그인폼 시작 -->
<% if(loginMember == null) { %>
<form id="loginFrm" name="loginFrm" action="<%= request.getContextPath()%>/member/login" method="POST">
    <table>
        <tr>
            <td><input type="text" name="memberId" id="memberId" placeholder="아이디" tabindex="1"
            value=<%= saveId != null ? saveId : "" %>></td>
            <td><input type="submit" value="로그인" tabindex="3"></td>
        </tr>
        <tr>
            <td><input type="password" name="password" id="password" placeholder="비밀번호" tabindex="2"></td>
            <td></td>
        </tr>
        <tr>
            <td colspan="2"><input type="checkbox" name="saveId" id="saveId" 
            <%= saveId != null ? "checked" : "" %>/> 
            <label for="saveId">아이디저장</label>&nbsp;&nbsp; 
            <input type="button" value="회원가입"></td>
        </tr>
    </table>
</form>
<!-- 로그인폼 끝-->

 


cookie의 종류

① session cookie

- 서버에 접속한 동안만 client에 보관

 

② persistent cookie

- maxAge를 지정한 경우

session cookie에 해당되는 JSESSIONID의 만료기한은 sesssion이라 되어있고, persistent cookie에 해당되는 saveId는 지정했던 1주일로 확인 됩니다.

별도 지정을 하지 않으면 session cookie!

 


여기까지 실행했을 때, 체크 박스를 풀어도 그대로 남아있게 됩니다.

체크 박스 여부에 따른 분기처리를 해보도록 하겠습니다.

 

아이디 체크 박스 비활성화 설정

Controller

MemberLoginServlet

public class MemberLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private MemberService memberService = new MemberService();

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩 처리
		request.setCharacterEncoding("utf-8");
		
		// 2. 사용자 입력 값 처리
		String memberId = request.getParameter("memberId");
		String password = request.getParameter("password");
		String saveId = request.getParameter("saveId");
		
		// 3. 업무로직 : 로그인 여부 판단
		Member member = memberService.findById(memberId);
		System.out.println("member@MemberLoginServlet = " + member);
		
		HttpSession session = request.getSession();
		System.out.println(session.getId());	// 클라이언트 쪽과 동일
		
		if(member != null && password.equals(member.getPassword())) {
			// 로그인 성공
			session.setAttribute("loginMember", member);
			
			// saveId 처리
			Cookie cookie = new Cookie("saveId", memberId);
			cookie.setPath(request.getContextPath());	// /mvc -> /mvc로 시작하는 요청 주소에 cookie를 함께 전송
			
			// saveId 사용하는 경우
			if(saveId != null) {
				// session cookie(서버에 접속한 동안만 client에 보관) | persistent cookie(maxAge를 지정한 경우)
				cookie.setMaxAge(7 * 24 * 60 * 60);	// 초단위로 설정 -> 7일
			} else {
				// saveId 사용하지 않는 경우
				cookie.setMaxAge(0);
			}
			response.addCookie(cookie);	// 응답메세지에 Set-Cookie 항목으로 전송
		} else {
			// 로그인 실패
			session.setAttribute("msg", "아이디 또는 비밀번호가 일치하지 않습니다.");
		}
		
		// 4. 응답 처리 : 로그인 후 url변경을 위해 리다렉트 처리
		response.sendRedirect(request.getContextPath() + "/");	// /mvc/
	}
}

saveId가 존재한다면 7일의 유효기간을 설정을 해주었고, 사용하지 않는다면 유효기간을 0으로 설정해주었습니다.

쿠키는 브라우저에서 관리 하는 것이기 때문에 서버 측에서 쿠키를 제거할 수가 없으므로 유효기간을 0으로 설정해줍니다.

Set-Cookie를 확인하면 0으로 설정했기 때문에 과거 시간으로 설정되어 즉시 삭제가 되었습니다.