쿠키와 세션

예지성준·2024년 6월 18일
0
post-thumbnail

쿠키🍪

개개인을 구분하기 위한 서비스

  • 브라우저에 저장된 데이터
  • 개인 서비스 제공 가능 기술
  • 사용자 개인을 어떻게 구분하는지?
  • 개개인을 구분할 수 있는 데이터를 웹 브라우저에 저장되어있다.
  • 쿠키 데이터가 필요한 대상은 서비스를 제공하는 서버가 필요하다
  • 데이터는 브라우저에 있다. 필요한 대상 서버!
  • 매 요청시마다 요청 헤더를 통해서 쿠키 데이터를 서버쪽으로 전송한다.
  • 세션과 마찬가지로 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법입니다.
  • 세션과 달리 상태 정보를 웹서버가 아닌 클라이언트에 저장합니다.
  • 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하므로 이후에 웹 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 포함됩니다.
  • 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있습니다.

개개인을 구분하기 위해 쿠키가 필요하다.
브라우저가 서버쪽으로 쿠키 보내줌~

쿠키도 등록, 조회, 삭제가 주된 작업일것이다.
등록 -> 데이터가 필요한 주체 = 서버, 서버가 등록 요청
어떻게?? -> 브라우저에게 등록해달라고 요청함
조회 -> request

👩‍🏫
쿠키 조회: HttpServletRequest - Cookie[] getCookies()
요청 헤더를 통해서 넘어온 데이터니까!

쿠키 등록: HttpservletResponse - void addCookie(Cookie cookie)
◾호출하면 응답헤더에 Set-Cookie가 이름-값 형태로 저장된다.
◾브라우저가 응답 헤더를 바탕으로 쿠키 값을 등록

HttpServletRequest 인터페이스

쿠키 객체 배열 형태로 반환되어 나옴

HttpServletResponse 인터페이스

이거 보고 응답 헤더 생성

1. 쿠키의 동작과정

🔖쿠키 클래스

Cookie(String name, String value)

1) 쿠키 생성단계

  • 쿠키를 사용하려면 먼저 쿠키를 생성해야 한다. 쿠키는 주로 웹 서버 측에서 생성한다.
    생성된 쿠키는 응답 데이터와 함께 저장되어 웹 브라우저에 전송된다.
  • 서버 -> 응답헤더(Set-Cookie: 키=값; 키=값;..)
  • 쿠키를 사용하려면 먼저 Cookie 클래스를 사용하여 쿠키를 생성
  • 쿠키를 생성하는 데이터는 Cookie() 생성자를 사용한다
  • 쿠키를 생성한 후에는 반드시 response 내장 객체의 add Cookie() 메서드로 쿠키를 설정해야한다.
#쿠키 생성자 사용예시
<%@ page contentType="text/html; charset=UTF-8"%>

<%
    Cookie cookie = new Cookie("memberId","admin");
    response.addCookie(cookie);
%>
#cookie01.jsp파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
    <title>Cookie</title>
</head>
<body>
<form action="cookie01_process.jsp" method="POST">
    <p>	아 이 디 : <input type="text" name="id">
    <p>	비밀번호 : <input type="text" name="passwd">
    <p>	<input type="submit" value="전송">
</form>
</body>
</html>
#cookie01_process.jsp파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
    <title>Cookie</title>
</head>
<body>
<%
    String user_id = request.getParameter("id");
    String user_pw = request.getParameter("passwd");

    if (user_id.equals("admin") && user_pw.equals("1234")) {
        Cookie cookie_id = new Cookie("userID", user_id);
        Cookie cookie_pw = new Cookie("userPW", user_pw);
        response.addCookie(cookie_id);
        response.addCookie(cookie_pw);
        out.println("쿠키 생성이 성공했습니다<br>");
        out.println(user_id + "님 환영합니다");
    } else {
        out.println("쿠키 생성이 실패했습니다");
    }
%>
</body>
</html>


2) 쿠키 저장단계

브라우더가 이 헤더를 보고 저장한다.

이 데이터는 서버가 필요하다!
매 요청시마다 요청 헤더에 실려서 쿠키 데이터가 전송된다.

  • 웹브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다. 쿠키는 종류에 따라 메모리나 파일로 저장된다.
  • 응답헤더(Set-Cookie: 키=값;..) -> 브라우저가 도메인별로 저장

3) 쿠키 전송단계

  • 웹브라우저는 한 번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송한다. 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있다.
  • 매 요청시 마다 요청 헤더 Cookie를 통해서 서버로 전송
  • setMaxAge -> 쿠키 유효시간을 설정
  • setHttpOnly(): ✔false
    • 서버쪽 조회 가능(HttpServletRequest - Cookie[] getCookies())
    • 브라우저 자바스크립트 document 객체를 통해서 조회 가능(document.cookie)
      : ✔true
    • 서버쪽만 조회 가능(HttpServletRequest - Cookie[] getCookies())
    • 브라우저 자바스크립트로는 조회 불가

3. 쿠키 객체 얻기

  • 클라이언트에 저장된 모든 쿠키 객체를 가져오려면 request 내장 객체의 getCookies()메서드를 사용한다.
    Cookie[] requst.getCookies()
    getCookies -> 전체 쿠키 내용 조회
# getCookies()메서드 사용 예시
Cookie[] cookies = request.getCookies();

4. 쿠키 객체의 정보 얻기

#cookies02.jsp 파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
    <title>Cookie</title>
</head>
<body>
<%
    Cookie[] cookies = request.getCookies();
    out.println("현재 설정된 쿠키의 개수 => " + cookies.length + "<br>");
    out.println("==========================<br>");
    for (int i = 0; i < cookies.length; i++) {
        out.println("설정된 쿠키의 속성 이름 [ " + i + " ] : " + cookies[i].getName() + "<br>");
        out.println("설정된 쿠키의 속성 값 [ " + i + " ] : " + cookies[i].getValue() + "<br>");
        out.println("---------------------------------------------<br>");
    }
%>
</body>
</html>

5. 쿠키 삭제

  • 쿠키 클래스는 쿠키를 삭제하는 기능을 별도로 제공하지 않는다.
  • 쿠키를 더 유지할 필요가 없으면 쿠키의 유효기간을 만료시키면 된다.

setMaxAge -> 쿠키의 최대 수명을 초 단위로 설정합니다.(쿠키 유효시간을 설정)

✅ void setMaxAge(int age) 메서드에 유효 기간을 0으로 설정하여 쿠키를 삭제할 수 있다.

브라우저 만료시 삭제됨
1970.1.1 0:0:0/ 현재 시간보다 이전 시간으로 설정하면 브라우저가 삭제한다.

서버가 알려주고 삭제는 브라우저가!

#cookie03.jsp 파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie</title>
</head>
<body>
	<%
		Cookie[] cookies = request.getCookies();

		for (int i = 0; i < cookies.length; i++) {
			cookies[i].setMaxAge(0);
			response.addCookie(cookies[i]);
		}
		response.sendRedirect("cookie02.jsp");
	%>
</body>
</html>

쿠키 jsp에서 만들었던 쿠키들은 다 삭제되었다!


이 경로에서 쿠키 데이터가 유지된다.( 현재있는 경로가 기본 경로가 됨)
-> day05 (contextPath)
-> day05/하위경로
가능⭕⭕🙆‍♀️

경로 바꿨을때!
🔽🔽

key 없다!!

범위를 전역으로 설정해주고싶을땐 setPath()를 이용해서 설정을 바꿀 수 있다.

🔽이 path를 포함한 하위 경로이면(contextPath)다른쪽에서도 공유가능한걸 확인할 수 있당🔽


세션🖥

  • 쿠키는 매 요청시마다 요청헤더를 통해서 개인 데이터가 전송 된다 -> 보안에 취약

  • 매번 네트워크를 통해서 전송되므로, 네트워크에 부담이 됨

  • 세션은 서버가 살아있는 동안 유지

  • 개인 데이터를 서버에 저장하는 기술: 세션

  • 개인 데이터를 서버에 저장하므로 브라우저가 보내줄 필요 없다.

    • 개인 데이터를 서버에 저장해두면 이게 누구 데이터인지 어떻게 구분을 할까 ❓❔❔

세션 id로 구분!!!!

개인 서비스제공 기술 ~~

1. session 내장객체 메서드 종류

HttpSession

2. 세션 생성

void setAttribute(String name, Object value);

조회는 서블릿클래스 내에서 조회해보자

  • 서블릿 추가

3. 세션 정보

Object getAttribute(String name);

요청 처리하면서 세션쪽 개인 데이터를 가져옴

4. 세션 삭제

void removeAttribute(String name);

title 삭제되었다.

  • invalidate(): 세션 데이터 비우기
    • 세션쪽은 개인데이터가 담겨있기 때문에 더이상 개인 데이터를 사용하지 않는다면 비우는게 좋다.

5. 세션 유효 시간 설정

  • setMaxInactiveInterval
    초단위로 설정

활동 안할때 살아있는 시간 ex) 은행 로그인 상태

쿠키와 세션의 차이

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글