(2022) 공부 (Study)

🔥 JSP 기본 정리 - #13 Cookie

수낭 2020. 12. 31. 11:29

 이번 시간에는 현재까지도 많이 쓰이고 있는
Cookie의 개념과 사용법에 대해서 알아보겠습니다.


🔑 목차

🎉 1. Cookie 란?

🎉 2. Cookie 구현

 

🚩 1. Cookie 란?

 Cookie는 현재는 보안 관련 문제 때문에 점점 쓰이지 않는 추세지만,
과거부터 유용하게 쓰여 온 기능이다. (하지만 보안에 취약하다.)

 클라이언트서버연결유지시켜주는 방법 중 하나로 Cookie라는 것이 있다.
(
연결 시도 흔적을 이용한 방법이기 때문에 과자의 부스러기 느낌으로 Cookie가 됐다.)

 ServerClient가 연결을 시도할 때, 흔적이 발생하는데,
이 흔적을 가지고
과거 접속했다는 것을 알고 (재연결시) 해당 접속의 유지를 돕는 개념이다.

 우리가 현재 사용하고 있는 연결 프로토콜Http이고,
이 프로토콜은,
브라우저(클라이언트)에서 서버request를 보내고 response를 받은 뒤에는
연결이 끊어진다. , 1회 정보를 주고 받은 뒤, 연결을 해제해버린다.
(
여러 사용자가 이용하는 경우, 서버의 과부하를 막기 위해서)

 이렇게 연결을 그때마다 해제해버리면,
로그인 / 장바구니 등 다양한 정보를
다시 입력해야 하기 때문에 비효율적이다.
그래서 등장한 것이
Cookie(쿠키)라는 흔적이다.

 서버Cookie를 저장하게 되면, 부하가 걸릴 수 있기에, 개인 브라우저에 저장됨

 

🚩 2. Cookie 구현

 쿠키가 없는 경우(==null) / 첫 접속인 경우 = 쿠키 생성
쿠키가 있는 경우(!=null) = 쿠키 재활용
이러한 구도이다.

< LoginCon.java (Servlet 파일) >

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

		String mID = request.getParameter("mID");
		String mPW = request.getParameter("mPW");
		
		PrintWriter out = response.getWriter();
		
		out.print("<p>mID : " + mID + "</p>");
		out.print("<p>mPW : " + mPW + "</p>");
		
		Cookie[] cookies = request.getCookies();
		Cookie cookie = null;
		
		for(Cookie c : cookies) {
			System.out.println("c.getName() :"+c.getName()+", c.getValue() :"+c.getValue());
			
			if(c.getName().equals("memberID")) {
				cookie = c;
			}
		}
		
		if(cookie == null) {
			cookie = new Cookie("memberID", mID);
		}
        	response.addCookie(cookie);
		cookie.setMaxAge(60*60);
		
		response.sendRedirect("loginOk.jsp");
	}

 Cookie여러 개의 정보가 있을 수 있기 때문에, 배열로 관리한다.

 Cookie사용자 브라우저저장되고,
사용자의
request에 의해서 발생된 것이기 때문에 request 객체에서 getCookies()를 한다.

if(cookie == null) {
	cookie = new Cookie("memberID", mID); 
}

“memberID”라는 이름의 Cookie가 없다면,
Cookie
name = “memberID”
Cookie
value = mID (사용자가 입력한 ID ) ( request.getParameter("mID"); )
새로 생성한다.

response.addCookie(cookie);

(Cookie가 없어서) 위에서 새로 만든 Cookie추가해서 돌려준 (response) .

cookie.setMaxAge(60*60);

Cookie의 생존기간60*60초,  
,
1시간으로 설정하는 Method이다. (1시간 뒤 자동 삭제)

< login.jsp (JSP 파일) >

<body>
	<%
	Cookie[] cookies = request.getCookies();
	System.out.println("cookies : "+cookies);
	
	if(cookies!=null){
		for(Cookie c : cookies){
			if(c.getName().equals("memberID")){
				response.sendRedirect("loginOk.jsp");
			}
		}
	}
	%>
    
	<form action="LoginCon" method="post">
		ID : <input type="text" name="mID"><br>
		PW : <input type="password" name="mPW"><br>
		<input type="submit" value="login">
	</form>
</body>

login.jsp는 처음 로그인 화면 (ID, PW 입력) 이다.

if(cookies!=null){
		for(Cookie c : cookies){
			if(c.getName().equals("memberID")){
				response.sendRedirect("loginOk.jsp");
		}
	}
}

“memberID” 라는 이름의 Cookie존재한다면
login
화면을 거치지 않고,
loginOk.jsp강제 이동(redirect) 시켜버린다.

< loginOk.jsp (JSP 파일) >

<body>
	<%
	Cookie[] cookies = request.getCookies();
	for(Cookie c : cookies){
		out.print("name : "+c.getName()+"<br>");
		out.print("value : "+c.getValue()+"<br>");
        
		out.print(" ----- ----- ----- ----- <br>");
	}
	%>
</body>

 최종 화면, 모든 Cookie출력

< 실행 결과 >

아이디 / 패스워드 입력

 

Cookie 값 확인

 JSESSIONID 등의 Cookie들은 브라우저가 만든 기본/자체적Cookie이다.
 (
무시해도 된다.)

 login.jsp로 주소를 수정하고, 접속 시도해보자.

 이미 memberID라는 이름의 Cookie가 있기 때문에,
loginOK.jsp강제 이동된다. (login 화면 중복 방지)

 

다음 포스팅에서는 Session에 대해서 다뤄보겠습니다.