Cookie & Session 개념 정리

홍나연·2024년 9월 29일

Backend

목록 보기
3/8

Cookie란?

웹 브라우저에 저장되는 작은 데이터 조각
서버가 클라이언트에게 전송하는 정보 저장 → 사용자가 다음에 웹사이트를 방문할 때 활용할 수 있도록 줌.
ex) 로그인 상태를 유지하거나 사용자 환경 설정을 기억하는 데 사용

Cookie의 특징

  • Key : Value 형태의 문자열 데이터
  • 클라이언트 별 별도의 Cookie 생성 (클라이언트에 최대 300개 쿠키 저장 가능)
  • Cookie는 4KB 이하로 제한, 도메인당 최대 20개의 Cookie 저장 가능
  • 만료일 설정 가능 (특정 시간이 지나면 자동 삭제)

Cookie의 동작 순서

  1. 클라이언트 요청 생성 (클라이언트 → 서버)
  2. WAS Cookie 생성 & HTTP 헤더에 Cookie 넣어 응답 (서버 → 클라이언트)
  3. 클라이언트 Cookie 저장(자신의 브라우저에 저장) &
    해당 서버에 요청할 때 요청+Cookie 전공 (클라이언트 → 서버)
  4. 서버 Cookie 참조하여 사용자 정보 확인 및 필요한 처리 진행

Cookie 주요 메서드

메서드설명
setMaxAge(int expiry)쿠키를 유지하기 위한 시간 설정
getCookies()현재 요청에 포함된 모든 쿠키 반환
getName()쿠키 이름 반환
getValue()쿠키 값 반환
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    // 쿠키 생성
    String userName = request.getParameter("username");
    Cookie userCookie = new Cookie("username", userName);
    userCookie.setMaxAge(60 * 60); // 1시간 동안 유효
    response.addCookie(userCookie);
%>
<!DOCTYPE html>
<html>
<head>
    <title>Cookie 예제</title>
</head>
<body>
    <h1>Cookie 설정 완료</h1>
    <p>쿠키에 저장된 사용자 이름: <%= userName %></p>
</body>
</html>

사용자가 웹 페이지에 접속하면 서버는 클라이언트의 요청에서 username이라는 매개변수를 읽음 → 읽은 사용자 이름을 기반으로 쿠키 생성, 해당 쿠키를 클라이언트에게 전송 → 사용자가 설정 완료 메시지를 포함한 웹 페이지를 보게 됨


Session이란?

클라이언트와 서버 간의 특정 시간 동안의 상태를 유지하는 방법으로 사용자의 상호작용을 통해 생성된 정보의 집합
서버 측에서 관리, 일반적으로 사용자가 웹 애플리케이션을 사용하는 동안의 상태를 저장하고 사용자 정보를 관리하는 데 사용
ex) 로그인 정보나 장바구니 내용 저장 시 활용

Session의 특징

  • Session 정보는 서버에 저장되어 클라이언트에 대한 정보가 보안적으로 관리
  • Session은 각 클라이언트를 구분하기 위한 고유한 식별자(sessionnid)를 생성하여 사용
  • 사용자가 웹사이트에서 여러 페이지를 이동할 때 상태를 유지할 수 있도록 도와줌
  • Session에 저장할 수 있는 데이터 크기에는 제한이 없지만, 서버의 메모리 사용량을 고려해야 함

Session의 동작 순서

  1. 클라이언트 페이지 요청 (클라이언트 → 서버)
  2. 서버 쿠키 내 session id 존재 여부 확인
  3. session id 존재 X → session id 생성 후 고유한 session id를 클라이언트에게 전달
  4. 생성된 session id를 이용하여 서버 내 메모리 생성 (사용자 이름이나 장바구니 내용 등 저장)
  5. 클라이언트 요청 시 쿠키에 session id를 포함해 전달 → 서버 내 저장된 session id와 비교하여 데이터 조회

Session 주요 메서드

메서드설명
getAttribute(String)이름에 해당하는 속성 반환
setAttribute(String, Object)이름과 값 저장
getId()세션 ID 반환
getCreationTime()생성 시간 반환
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    // 세션 생성 또는 기존 세션 가져오기
    HttpSession session = request.getSession();
    
    // 사용자 이름을 세션에 저장
    String userName = request.getParameter("username");
    session.setAttribute("username", userName);
%>
<!DOCTYPE html>
<html>
<head>
    <title>Session 예제</title>
</head>
<body>
    <h1>Session 설정 완료</h1>
    <p>세션에 저장된 사용자 이름: <%= session.getAttribute("username") %></p>
</body>
</html>

사용자가 웹 페이지에 접속, 서버는 클라이언트의 요청에서 username이라는 매개변수를 읽음 → 이 값을 기반으로 세션에 사용자 이름 저장 & 세션은 서버 측에 저장되므로 클라이언트가 다른 페이지로 이동해도 값 유지 → 세션에 저장된 사용자 이름을 포함한 설정 완료 메시지를 웹 페이지에 표시

0개의 댓글