개발자는신이야
The first step
개발자는신이야
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • 🍃웹개발 Spring (15)
    • ❓내 질문 (4)
    • 🔥웹개발종합반 (11)
    • 💻개인프로젝트 (5)
    • 😕error (2)
    • 💡알고리즘 (3)
    • 📖혼자공부하는자바 (22)
    • 📑WIL (2)
    • 🥸 CS 면접 스터디 (13)
    • 🤓천재교육 풀스택 1기 노트 (21)
    • ⏰정처기 공부 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • jquery
  • IntelliJ
  • Controller
  • HTML
  • CRUD
  • SQL
  • dependencies
  • repository
  • Lombok
  • db
  • boot
  • API
  • style
  • database
  • 기초
  • 변수
  • JPA
  • CSS
  • Java
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자는신이야

The first step

JSP 쿠키
🤓천재교육 풀스택 1기 노트

JSP 쿠키

2023. 8. 1. 23:37

쿠키

쿠키란 클라이언트의 상태 정보를 유지하기 위한 기술이다.

상태 정보를 클라이언트에 키와 값 형태로 저장한다.

 

  • 쿠키는 3000개까지 만들 수 있다. (하지만 대부분 100개 만 만들어도 서버는 버벅거린다.)
  • 쿠키 하나의 최대 크기는 4096바이트이다.
  • 하나의 호스트나 도메인에서 최대 50개까지 만들 수 있다.

동작 메커니즘

 

  1. 클라이언트가 서버에 요청을 보낸다.
  2. 서버가 쿠키를 생성하여 HTTP 응답 헤더에 실어 클라이언트에 전송한다.
  3. 클라이언트는 쿠키를 받아 저장한다. (이 시점에서 쿠키가 클라이언트에만 저장된 상태이므로 서버는 아직 쿠키를 사용할 수 없다.)
  4. 클라이언트는 다음번 요청 시 저장해둔 쿠키를 HTTP 요청 헤더에 실어 보낸다.
  5. 서버는 쿠키의 정보를 읽어 필요한 작업을 수행한다.

쿠키의 속성과 API

속성

  • 이름: 쿠키를 구별하는 이름
  • 값: 쿠키에 저장할 실제 데이터
  • 고메인: 쿠키를 적용할 도메인
  • 경로: 쿠키를 적용할 경로
  • 유지 기간: 쿠키를 유지할 기간

설정 메서드

  • void setValue(String value): 쿠키의 값을 설정한다. (쉼표(,)나 세미콜론(;)같은 문자는 포함할 수 없다.)
  • void setDomain(String domain): 쿠키에 적용할 도메인을 설정한다. 주 도메인만 적용하고 싶다면 "도메인" 형태로 기술한다. 만약 서브 도메인에도 적용하고 싶다면 ".도메인" 형태로 기술한다.
    ex) setDomain(".helllo.co.kr")로 설정하면 www.hello.co.kr은 물론 mail.hello.co.kr등에도 쿠키가 적용된다.
  • void setPath(String path): 쿠키가 적용될 경로를 지정한다. 지정한 경로와 그 하위 경로에 까지 적용된다.
  • void setMaxAge(int expire_seconds): 쿠키가 유지될 기간을 초 단위로 설정한다. 기간을 설정하지 않으면 웹 브라우저가 닫힐 때 쿠키도 같이 삭제된다.

    (키의 이름은 생성자를 통해 설정하고 생성 후에는 더 이상 이름을 변경할 수 없다.)
  • new Cookie(String name, String value): 이름과 값을 받아 새로운 쿠키를 생성한다.

쿠키 정보를 읽는 메서드

  • String getName(): 쿠키의 이름을 반환한다.
  • String getValue(): 쿠키의 값을 반환한다.
  • String getDomain(): 쿠키가 적용되는 도메인을 반환한다.
  • String getPath(): 쿠키의 적용 경로를 반환한다. 단, setPath()로 설정한 적이 없다면 null을 반환한다.
  • int getMaxAge(): 쿠키의 유지 기간을 반환한다. 단, setMaxAge()로 설정한 적이 없다면 -1을 반환한다.

 

쿠키는 생성 직후에는 사용할 수 없다.

클라이언트로부터 재요청이 들어올 때 요청 헤더를 통해 쿠기가 서버로 전송되는데 이때부터 내용을 읽을 수 있다.

그리고 실행을 하면 JESSIONID라는 쿠키를 볼 수 있다.

이 쿠키는 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키로, 새로운 웹브라우저를 열면 자동으로 생성된다.

 

쿠키 관리자

쿠키를 읽을 때는 쿠키를 배열로 가져오기 때문에 반복문과 조건문이 필요하다.

그래서 쿠키를 편리하게 사용할 수 있게 도와주는 클래스를 만들 수 있다.

 

package com.example.chunjaejpa;

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

public class CookieManager {
    public static void makeCookie(HttpServletResponse response, String cName, String cValue, int cTime) {
        Cookie cookie = new Cookie(cName, cValue);
        cookie.setPath("/");
        cookie.setMaxAge(cTime);
        response.addCookie(cookie);
    }

    public static String readCookie(HttpServletRequest request, String cName) {
        String cookieValue = "";

        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie c : cookies) {
                String cookieName = c.getName();
                if (cookieName.equals(cName)) {
                    cookieValue = c.getValue();
                }
            }
        }
        return cookieValue;
    }

    public static void deleteCookie(HttpServletResponse response, String cName) {
        makeCookie(response, cName, "", 0);
    }
}

 

  1. makeCookie() 메서드는 총 네 개의 매개변수를 받아 쿠키를 만들어 응답 헤더에 추가해 준다.
    1. 쿠키를 생성한다.
    2. 경로와 유지기간을 설정한다.
    3. 응답 헤더에 추가해 클라이언트로 쿠키를 전송한다.
  2. readCookie() 메서드는 명시한 쿠키의 값을 읽어 반환한다.
    이 메서드는 request 내장 객체로부터 클라이언트가 보내온 쿠키 목록을 받아서, cName과 이름이 같은 쿠키가 있다면 그 값을 반환한다.
  3. deleteCookie() 메서드는 주어진 이름의 기존 쿠키를 삭제한다.

 

쿠키를 이용해 팝업창을 제어하고 로그인 아이디를 저장하고 오늘 본 생춤을 기억한다거나, 게시글 조회수를 하루에 1만 증가시키는 등의 기능을 구현할 수 있다.

 

핵심 요약

  • 쿠키는 생성자를 통해서만 생성할 수 있다. 생성 후 쿠키값은 변경할 수 있으나 쿠키명은 변경할 수 없다.
  • setPath() 메서드로 적용할 경로를 설정한다.
  • setMaxAge() 메서드로 쿠키의 유지 기간을 설정한다.
  • response 내장 객체의 addCookie() 메서드로 클라이언트에 쿠키를 저장한다.
  • 쿠키는 생성 직후 바로 사용할 수 없다. 클라이언트가 재요청을 했을 때부터 사용이 가능하다.

'🤓천재교육 풀스택 1기 노트' 카테고리의 다른 글

JSP 세션  (0) 2023.08.02
JSP 지시어와 스크립트 요소  (0) 2023.07.30
JSP 기본  (0) 2023.07.30
천재교육 풀스택1기 과정 JSP Section1. 서블릿, 자바 웹 기술의 새 지평을 열다.  (3) 2023.07.28
천재교육 풀스택과정 1기 DAY17  (0) 2023.06.05
    '🤓천재교육 풀스택 1기 노트' 카테고리의 다른 글
    • JSP 세션
    • JSP 지시어와 스크립트 요소
    • JSP 기본
    • 천재교육 풀스택1기 과정 JSP Section1. 서블릿, 자바 웹 기술의 새 지평을 열다.
    개발자는신이야
    개발자는신이야
    첫발을 내디딘 초보 개발자입니다.

    티스토리툴바