본문 바로가기

웹 개발/JSP

[Web_JSP] 15

● 쿠키(Cookie)

- 웹 브라우저가 보관하고 있는 데이터로, 웹 서버에 요청을 보낼 때 헤더에 담아서 전송한다.

- 웹 브라우저는 쿠기가 삭제되기 전까지 웹 서버에 쿠키를 전송한다.

 

 

 

● 장단점

- 클라이언트의 특정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다.

- 정보가 사용자 컴퓨터(로컬)에 저장되기 때문에 보안에 위협받을 수 있다.

- 데이터 저장 용량에 한계가 있다.

- 일반 사용자가 브라우저 내의 기능인 "쿠키 차단"을 사용했을 경우 쿠키는 무용지물이 된다.

 

 

 

● 쿠키 동작 방식

1. 쿠키 생성

- 웹 서버에서 쿠키를 생성하고 쿠키에 응답 데이터를 담아서 웹 브라우저에 전송한다.

 

2. 쿠키 저장

- 웹 브라우저는 응답 데이터를 담고 있는 쿠키를 메모리나 파일로 저장한다.

 

3. 쿠키 전송

- 웹 브라우저는 쿠키 요청이 있을 때마다 웹 서버에 전송한다.

- 웹 서버는 쿠키를 사용해서 필요한 작업을 수행할 수 있다.

 

 

 

● 쿠키 생성 및 사용 방식

1) 쿠키 생성 후 response 객체에 담아준다.

Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");

response.addCookie(cookie);

 

2) 쿠키 유무를 확인하고 쿠키의 값을 얻어온다.

String cookieCheck = request.getHeader("Cookie");

if(cookieCheck != null){

    Cookie[] cookies = request.getCookies();

    for(Cookie cookie : cookies){

        cookie.getName();

        cookie.getValue();

    }

}

 

3) 쿠키를 삭제한다.

String cookieCheck = request.getHeader("Cookie");

if(cookieCheck != null){

    Cookie[] cookies = request.getCookies();

    for(Cookie cookie : cookies){

        cookie.setMaxAge(0); //초단위

        response.addCookie(cookie);

    }

}

 

 

 

 

실습(MVC)

- [Web_JSP] 14 이어서

 

 

1. MemberJoinOk.java

package com.board.app.member;

import java.io.IOException;
import java.util.Base64;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo; 
import com.board.app.domain.dao.MemberDAO;
import com.board.app.domain.vo.MemberVO;

public class MemberJoinOk implements Action {

	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		req.setCharacterEncoding("UTF-8");
		ActionInfo actionInfo = new ActionInfo();
		MemberDAO memberDAO = new MemberDAO();
		MemberVO memberVO = new MemberVO();
		
		memberVO.setMemberId(req.getParameter("memberId"));
		memberVO.setMemberPw(new String(Base64.getEncoder().encode(req.getParameter("memberPw").getBytes())));
		memberVO.setMemberName(req.getParameter("memberName"));
		memberVO.setMemberAge(Integer.parseInt(req.getParameter("memberAge")));
		memberVO.setMemberGender(req.getParameter("memberGender"));
		memberVO.setMemberEmail(req.getParameter("memberEmail"));
		memberVO.setMemberZipcode(req.getParameter("memberZipcode"));
		memberVO.setMemberAddress(req.getParameter("memberAddress"));
		memberVO.setMemberAddressDetail(req.getParameter("memberAddressDetail"));
		
		memberDAO.insert(memberVO);
		
		actionInfo.setPath("/member/MemberLogin.me");
		actionInfo.setRedirect(false);
		return actionInfo;
	}

}

 

 

 

2. MemberLogin.java

package com.board.app.member;

import java.io.IOException;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo;

public class MemberLogin implements Action {

	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		
		ActionInfo actionInfo = new ActionInfo();
		
		//쿠키 검사
		String memberId = null;
		String memberPw = null;
		String saveId = null;
		String autoLogin = null; 
		
		String cookieCheck = req.getHeader("Cookie");
		
		
		if(cookieCheck != null) {
			Cookie[] cookies = req.getCookies();
			for(Cookie cookie : cookies) {
				if(cookie.getName().equals("memberId")) {
					memberId = cookie.getValue();
					
				} else if(cookie.getName().equals("memberPw")) {
					memberPw = cookie.getValue();
					
				} else if(cookie.getName().equals("saveId")) {
					saveId = cookie.getValue();
					
				}else if(cookie.getName().equals("autoLogin")) {
					autoLogin = cookie.getValue();
					
				}
			}
		}
		
		req.setAttribute("memberId", memberId);
		req.setAttribute("memberPw", memberPw);
		req.setAttribute("saveId", saveId);
		req.setAttribute("autoLogin", autoLogin);
		
		actionInfo.setPath("/app/member/login.jsp");
		actionInfo.setRedirect(false);
		
		return actionInfo;
	}

}

 

 

 

3. MemberLoginOk.java

package com.board.app.member;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo;

public class MemberLoginOk implements Action{
	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		req.setCharacterEncoding("UTF-8");
		
		String memberId = req.getParameter("memberId"); 
		String memberPw = req.getParameter("memberPw");
		String saveId = req.getParameter("saveId");
		String autoLogin = req.getParameter("autoLogin");
		
		//쿠키 생성
		
		System.out.println(memberId);
		System.out.println(memberPw);
		System.out.println(saveId);
		System.out.println(autoLogin);
		
		return null;
	}
}
 

 

 

 

4. MemberFrontController.java

package com.board.app.member;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.ActionInfo; 

public class MemberFrontController extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}

	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String requestURL = req.getRequestURI();
//		String command = requestURL.substring(requestURL.lastIndexOf("/") + 1);
		String command = requestURL.substring(req.getContextPath().length());
		ActionInfo actionInfo = null;
		System.out.println(command);
		
		if(command.equals("/member/MemberCheckIdOk.me")) {
			new MemberCheckIdOk().execute(req, resp);
		}else if(command.equals("/member/MemberJoinOk.me")) {
			actionInfo = new MemberJoinOk().execute(req, resp);
		}else if(command.equals("/member/MemberLogin.me")) {
			actionInfo = new MemberLogin().execute(req, resp);
		}else if(command.equals("/member/MemberLoginOk.me")) {
			actionInfo = new MemberLoginOk().execute(req, resp);
		}
		
		if(actionInfo != null) {
			if(actionInfo.isRedirect()) {
				resp.sendRedirect(actionInfo.getPath());
			}else {
				RequestDispatcher dispatcher = req.getRequestDispatcher(actionInfo.getPath());
				dispatcher.forward(req, resp);
			}
		}
	}
}

 

 

 

 

'웹 개발 > JSP' 카테고리의 다른 글

[Web_JSP] 17  (0) 2022.06.05
[Web_JSP] 16  (0) 2022.06.04
[Web_JSP] 14  (0) 2022.06.02
[Web_JSP] 13  (0) 2022.06.01
[Web_JSP] 12  (0) 2022.05.31