모도리는 공부중

21.01.11. Cookie & Server 본문

K-디지털 빅데이터 분석서비스 개발자과정 20.11.02~21.04.12/JAVA

21.01.11. Cookie & Server

공부하는 모도리 2021. 1. 11. 15:57
728x90
반응형

아직 정리하지 못한 jsp & servlet는 일단 보류하고..

 

오늘부터 새로운 파트!

Cookie & Session

 

 

Client가 Server로 요청하면 해당 Page를 Client에게 전송(응답)한 후 연결을 종료한다. 그렇기 때문에 우리는 웹페이지에서 개발자도구(F12)를 통해 편집이 가능하다.

 

바로 이렇게 ↓

 

오연서씨 좋아합니다. 그저 가져온 뉴스 타이틀이 이것일뿐이니 오해는 하지 말아주세요.

 

 

그럼 이렇게 연결이 끊기는데 우리가 로그인한 정보는 어떻게 이어지는걸까?

 

Cookie & Session

  • Client의 정보를 지속적으로 유지하기 위한 방법
  • client에 저장한다 → cookie
  • server에 저장한다 → session

클라이언트에 저장되는 쿠키는 보안에 취약, 하지만 서버에 저장하는 세션은 보안이 강력하다.

 

Cookie

  • 전달할 데이터를 Web Browser(Client)로 보냈다가 Web Server로 되돌려 받는 방법

쌓여있는 쿠키 확인을 위해 잠시 크롬에 확장프로그램을 설치해보자.

 

 

그리고 수업을 위해 새로운 프로젝트를 생성해봅시다.

 

 

package com;

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;

@WebServlet("/MakeCookie")
public class MakeCookie extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Cookie cookie = new Cookie("id", "mdr"); //Cookie(name, value)
/*		1. 기본적으로 쿠키안에 있는 값은 영어만 넣을 수 있다.
		2. 문자로만 넣을 수 있다.	*/
		
//		로그인에 성공했을 때 쿠키를 구워서 다시 보내준다.
		response.addCookie(cookie);
	}

}

 

 

기본 기한이 1년인 것을 확인할 수 있다.

그럼 저 기한을 우리가 직접 설정해줄 순 없는걸까? - 가능하다.

//	우리는 쿠키에게 나이를 정해줄 수 있다. cookie의 기한 설정 : 초(sec)로 계산
	cookie.setMaxAge(365*24*60*60); // 365일 * 24시간 * 60분 * 60초

이 코드를 Cookie cookie와 response사이에 삽입하고 재실행해보면,

 

 

변함이 없어보이지만 변했다고 한다.(?ㅋㅋㅋㅋㅋㅋ)

 

 

오.. 에딧쿠키의 단점 발견.. 브라우저를 껐다 켜니 에딧쿠키에 남아있어야할 쿠키가 없어졌다(?)

 

쿠키 보는 다른 방법.

 

 


새로운 서블릿을 또 만들어줍시다. → SelectCookie.java

package com;

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;

@WebServlet("/SelectCookie")
public class SelectCookie extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Cookie[] cookies = request.getCookies();
//		쿠키는 하나만 생길 수도 있지만 어느 사이트 하나만 다녀와도 굉장히 많은 양의 쿠키가 생성된다. 그러므로 배열로 저장하게 되는 것.
		for (int i = 0; i < cookies.length; i++) {
			 System.out.println(cookies[i].getName()+"/"+cookies[i].getValue()); //getName() : 쿠키의 이름, getValue() : 쿠키의 값.
		}
	}

}

 

 

 

자, 그럼 이제 쿠키를 삭제해봅시다.

하지만 아쉽게도 쿠키는 삭제하는 방법(method)이 없습니다. 그럼 어떻게 할까요?

- 새로운 쿠키를 만들어서 덮어씌우는 방식으로 삭제하는 편법을 사용하면 가능하다. DeleteCookie.java

package com;

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;

@WebServlet("/DeleteCookie")
public class DeleteCookie extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Cookie cookie = new Cookie("id", ""); //name은 id, 쿠키는 삭제할 것이므로 값은 아무거나 넣거나 넣지 않아도 무관.
		
		cookie.setMaxAge(0); //쿠키의 나이를 0세로.
		
		response.addCookie(cookie); //쿠키를 보내줘야하므로 response.
	}

}


잘 삭제된 것을 확인할 수 있다.

 

 

cookie의 단점

text형태로 제작.

도메인 갯수만큼 가능.

실제로는 서버에 저장하는 Session을 더 많이 사용한다.

728x90
반응형
Comments