쿠키

HTTP 쿠키 (웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저로 전송하는 작은 데이터 조각입니다. 브라우저는 이를 저장했다가 이후 동일한 서버에 요청을 보낼 때 함께 전송할 수 있습니다. 일반적으로 두 요청이 동일한 브라우저에서 왔는지 확인하는 데 사용되며, 예를 들어 사용자의 로그인 상태를 유지하는 데 쓰입니다. 상태가 없는 HTTP 프로토콜에서 상태 정보를 기억하는 역할을 합니다.

쿠키는 주로 세 가지 목적으로 사용됩니다:

  • 세션 관리: 로그인, 장바구니, 게임 점수 등 서버가 기억해야 하는 모든 정보

  • 개인화: 사용자 환경 설정, 테마 및 기타 설정

  • 추적: 사용자 행동 기록 및 분석

브라우저에 쿠키를 효율적으로 전송할 수 있도록 CodeIgniter는 쿠키 상호 작용을 추상화한 CodeIgniter\Cookie\Cookie클래스를 제공합니다.

쿠키 생성

현재 새로운 Cookie 값 객체를 생성하는 방법은 네 가지가 있습니다.

<?php

use CodeIgniter\Cookie\Cookie;
use DateTime;

// Using the constructor
$cookie = new Cookie(
    'remember_token',
    'f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6',
    [
        'expires'  => new DateTime('+2 hours'),
        'prefix'   => '__Secure-',
        'path'     => '/',
        'domain'   => '',
        'secure'   => true,
        'httponly' => true,
        'raw'      => false,
        'samesite' => Cookie::SAMESITE_LAX,
    ],
);

// Supplying a Set-Cookie header string
$cookie = Cookie::fromHeaderString(
    'remember_token=f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6; Path=/; Secure; HttpOnly; SameSite=Lax',
    false, // raw
);

// Using the fluent builder interface
$cookie = (new Cookie('remember_token'))
    ->withValue('f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6')
    ->withPrefix('__Secure-')
    ->withExpires(new DateTime('+2 hours'))
    ->withPath('/')
    ->withDomain('')
    ->withSecure(true)
    ->withHTTPOnly(true)
    ->withSameSite(Cookie::SAMESITE_LAX);

// Using the global function `cookie` which implicitly calls `new Cookie()`
$cookie = cookie('remember_token', 'f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6');

Cookie 객체를 생성할 때 name 속성만 필수입니다. 나머지는 모두 선택 사항입니다. 선택적 속성을 수정하지 않으면 Cookie클래스에 저장된 기본값으로 채워집니다.

기본값 재정의

클래스에 현재 저장된 기본값을 재정의하려면 Config\Cookie 인스턴스나 기본값 배열을 정적 메서드 Cookie::setDefaults()에 전달하면 됩니다.

<?php

use CodeIgniter\Cookie\Cookie;
use Config\Cookie as CookieConfig;

// pass in a Config\Cookie instance before constructing a Cookie class
Cookie::setDefaults(config(CookieConfig::class));
$cookie = new Cookie('login_token');

// pass in an array of defaults
$myDefaults = [
    'expires'  => 0,
    'samesite' => Cookie::SAMESITE_STRICT,
];
Cookie::setDefaults($myDefaults);
$cookie = new Cookie('login_token');

Config\Cookie 인스턴스나 배열을 Cookie::setDefaults()에 전달하면 기본값이 덮어써지며, 새로운 기본값이 전달될 때까지 유지됩니다.

일시적으로 기본값 변경

이러한 동작을 원하지 않고 일시적으로만 기본값을 변경하려면 Cookie::setDefaults()의 반환값(이전 기본값 배열)을 활용할 수 있습니다.

<?php

use CodeIgniter\Cookie\Cookie;
use Config\Cookie as CookieConfig;

$oldDefaults = Cookie::setDefaults(config(CookieConfig::class));
$cookie      = new Cookie('my_token', 'muffins');

// return the old defaults
Cookie::setDefaults($oldDefaults);

불변 쿠키

새로운 Cookie 인스턴스는 HTTP 쿠키의 불변 값 객체 표현입니다. 불변이기 때문에 인스턴스의 속성을 수정해도 원본 인스턴스에는 영향을 주지 않습니다. 수정은 항상 새로운 인스턴스를 반환합니다. 이를 사용하려면 새로운 인스턴스를 저장해야 합니다.

<?php

use CodeIgniter\Cookie\Cookie;

$cookie = new Cookie('login_token', 'admin');
$cookie->getName(); // 'login_token'

$cookie->withName('remember_token');
$cookie->getName(); // 'login_token'

$new = $cookie->withName('remember_token');
$new->getName(); // 'remember_token'

쿠키 전송

Response 객체의 CookieStoreCookie 객체를 설정하면 프레임워크가 자동으로 쿠키를 전송합니다.

CodeIgniter\HTTP\Response::setCookie()를 사용하여 설정합니다:

<?php

use CodeIgniter\Cookie\Cookie;

$response = service('response');

$cookie = new Cookie(
    'remember_token',
    'f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6',
    [
        'max-age' => 3600 * 2, // Expires in 2 hours
    ],
);

$response->setCookie($cookie);

set_cookie() 헬퍼 함수를 사용할 수도 있습니다:

<?php

use CodeIgniter\Cookie\Cookie;

helper('cookie');

$cookie = new Cookie(
    'remember_token',
    'f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6',
    [
        'max-age' => 3600 * 2, // Expires in 2 hours
    ],
);

set_cookie($cookie);

클래스 레퍼런스

class CodeIgniter\Cookie\Cookie
static setDefaults([$config = []])
매개변수:
  • $config (\Config\Cookie|array) – 설정 배열 또는 인스턴스

반환 형식:

array

반환:

이전 기본값

Config\Cookie 설정 또는 배열에서 값을 주입하여 Cookie 인스턴스의 기본 속성을 설정합니다.

static fromHeaderString(string $header[, bool $raw = false])
매개변수:
  • $header (string) – Set-Cookie 헤더 문자열

  • $raw (bool) – 이 쿠키가 URL 인코딩 없이 setrawcookie()를 통해 전송될지 여부

반환 형식:

Cookie

반환:

Cookie 인스턴스

예외:

CookieException

Set-Cookie 헤더에서 새로운 Cookie 인스턴스를 생성합니다.

__construct(string $name[, string $value = ''[, array $options = []]])
매개변수:
  • $name (string) – 쿠키 이름

  • $value (string) – 쿠키 값

  • $options (array) – 쿠키 옵션

반환 형식:

Cookie

반환:

Cookie 인스턴스

예외:

CookieException

새로운 Cookie 인스턴스를 생성합니다.

getId()
반환 형식:

string

반환:

쿠키 컬렉션에서 인덱싱에 사용되는 ID.

getPrefix() string
getName() string
getPrefixedName() string
getValue() string
getExpiresTimestamp() int
getExpiresString() string
isExpired() bool
getMaxAge() int
getDomain() string
getPath() string
isSecure() bool
isHTTPOnly() bool
getSameSite() string
isRaw() bool
getOptions() array
withRaw([bool $raw = true])
매개변수:
  • $raw (bool)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

URL 인코딩 옵션을 업데이트한 새로운 Cookie를 생성합니다.

withPrefix([string $prefix = ''])
매개변수:
  • $prefix (string)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 접두사를 가진 Cookie를 생성합니다.

withName(string $name)
매개변수:
  • $name (string)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 이름을 가진 Cookie를 생성합니다.

withValue(string $value)
매개변수:
  • $value (string)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 값을 가진 Cookie를 생성합니다.

withExpires($expires)
매개변수:
  • $expires (DateTimeInterface|string|int)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 만료 시간을 가진 Cookie를 생성합니다.

withExpired()
반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

브라우저에서 만료될 새로운 Cookie를 생성합니다.

withNeverExpiring()

중요

이 메서드는 버전 4.2.6부터 더 이상 사용되지 않으며 4.6.0에서 제거되었습니다.

매개변수:
  • $name (string)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

사실상 만료되지 않는 새로운 Cookie를 생성합니다.

withDomain(?string $domain)
매개변수:
  • $domain (string|null)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 도메인을 가진 Cookie를 생성합니다.

withPath(?string $path)
매개변수:
  • $path (string|null)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 경로를 가진 Cookie를 생성합니다.

withSecure([bool $secure = true])
매개변수:
  • $secure (bool)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 “Secure” 속성을 가진 Cookie를 생성합니다.

withHTTPOnly([bool $httponly = true])
매개변수:
  • $httponly (bool)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 “HttpOnly” 속성을 가진 Cookie를 생성합니다.

withSameSite(string $samesite)
매개변수:
  • $samesite (string)

반환 형식:

Cookie

반환:

새로운 Cookie 인스턴스

새로운 “SameSite” 속성을 가진 Cookie를 생성합니다.

toHeaderString()
반환 형식:

string

반환:

헤더 문자열로 전달할 수 있는 문자열 표현을 반환합니다.

toArray()
반환 형식:

array

반환:

Cookie 인스턴스의 배열 표현을 반환합니다.

class CodeIgniter\Cookie\CookieStore
static fromCookieHeaders(array $headers[, bool $raw = false])
매개변수:
  • $header (array) – Set-Cookie 헤더 배열

  • $raw (bool) – URL 인코딩을 사용하지 않을지 여부

반환 형식:

CookieStore

반환:

CookieStore 인스턴스

예외:

CookieException

Set-Cookie 헤더 배열에서 CookieStore를 생성합니다.

__construct(array $cookies)
매개변수:
  • $cookies (array) – Cookie 객체 배열

반환 형식:

CookieStore

반환:

CookieStore 인스턴스

예외:

CookieException

has(string $name[, string $prefix = ''[, ?string $value = null]]) bool
매개변수:
  • $name (string) – 쿠키 이름

  • $prefix (string) – 쿠키 접두사

  • $value (string|null) – 쿠키 값

반환 형식:

bool

반환:

이름과 접두사로 식별된 Cookie 객체가 컬렉션에 존재하는지 확인합니다.

get(string $name[, string $prefix = '']) Cookie
매개변수:
  • $name (string) – 쿠키 이름

  • $prefix (string) – 쿠키 접두사

반환 형식:

Cookie

반환:

이름과 접두사로 식별된 Cookie 인스턴스를 가져옵니다.

예외:

CookieException

put(Cookie $cookie) CookieStore
매개변수:
  • $cookie (Cookie) – Cookie 객체

반환 형식:

CookieStore

반환:

새로운 CookieStore 인스턴스

새로운 쿠키를 저장하고 새로운 컬렉션을 반환합니다. 원본 컬렉션은 변경되지 않습니다.

remove(string $name[, string $prefix = '']) CookieStore
매개변수:
  • $name (string) – 쿠키 이름

  • $prefix (string) – 쿠키 접두사

반환 형식:

CookieStore

반환:

새로운 CookieStore 인스턴스

컬렉션에서 쿠키를 제거하고 업데이트된 컬렉션을 반환합니다. 원본 컬렉션은 변경되지 않습니다.

dispatch() void

중요

이 메서드는 버전 4.1.6부터 더 이상 사용되지 않으며 4.6.0에서 제거되었습니다.

반환 형식:

void

저장소의 모든 쿠키를 디스패치합니다.

display() array
반환 형식:

array

반환:

저장소의 모든 쿠키 인스턴스를 반환합니다.

clear() void
반환 형식:

void

쿠키 컬렉션을 초기화합니다.