Cookies
HTTP 쿠키 (웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저로 보내는 작은 데이터 조각입니다. 브라우저는 이 파일을 저장하고 나중에 요청하여 동일한 서버로 다시 보낼 수 있습니다. 일반적으로 두 개의 요청이 동일한 브라우저에서 발생했는지 여부(예: 사용자 로그인 유지)를 확인하는 데 사용됩니다. 상태 비저장 HTTP 프로토콜에 대한 상태 정보를 기억합니다.
쿠키는 주로 세 가지 목적으로 사용됩니다:
Session management: 로그인, 쇼핑 카트, 게임 점수 또는 서버가 기억해야 하는 기타 사항
Personalization: 사용자 선호도, 주제가 다른 설정
Tracking: 사용자 동작을 기록하고 분석
To help you efficiently use cookies across browsers with your request and response, CodeIgniter provides the CodeIgniter\Cookie\Cookie
class to abstract the cookie interaction.
요청과 응답으로 브라우저에서 쿠키를 효율적으로 사용할 수 있도록 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(new CookieConfig());
$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(new CookieConfig());
$cookie = new Cookie('my_token', 'muffins');
// return the old defaults
Cookie::setDefaults($oldDefaults);
쿠키의 속성에 액세스
일단 인스턴스화되면, 당신은 Cookie
의 속성 중 하나를 사용하여 쉽게 접근할 수 있습니다.
<?php
use CodeIgniter\Cookie\Cookie;
use DateTime;
use DateTimeZone;
$cookie = new Cookie(
'remember_token',
'f699c7fd18a8e082d0228932f3acd40e1ef5ef92efcedda32842a211d62f0aa6',
[
'expires' => new DateTime('2025-02-14 00:00:00', new DateTimeZone('UTC')),
'prefix' => '__Secure-',
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
'raw' => false,
'samesite' => Cookie::SAMESITE_LAX,
]
);
$cookie->getName(); // 'remember_token'
$cookie->getPrefix(); // '__Secure-'
$cookie->getPrefixedName(); // '__Secure-remember_token'
$cookie->getExpiresTimestamp(); // Unix timestamp
$cookie->getExpiresString(); // 'Fri, 14-Feb-2025 00:00:00 GMT'
$cookie->isExpired(); // false
$cookie->getMaxAge(); // the difference from time() to expires
$cookie->isRaw(); // false
$cookie->isSecure(); // true
$cookie->getPath(); // '/'
$cookie->getDomain(); // ''
$cookie->isHTTPOnly(); // true
$cookie->getSameSite(); // 'Lax'
// additional getter
$cookie->getId(); // '__Secure-remember_token;;/'
// when using `setcookie()`'s alternative signature on PHP 7.3+
// you can easily use the `getOptions()` method to supply the
// $options parameter
$cookie->getOptions();
불변 쿠키
새 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'
쿠키 속성 검증
HTTP 쿠키는 브라우저에서 허용되기 위해 따라야 하는 몇 가지 사양에 의해 규제됩니다.
따라서, Cookie
의 특정 속성을 만들거나 수정할 때, 이러한 특성이 규격에 부합하는지 확인하기 위해 유효성을 검사합니다.
위반이 발견되면 CookieException
가 발생합니다.
이름 속성 검증
쿠키 이름은 다음을 제외한 모든 US-ASCII 문자일 수 있습니다:
control characters;
spaces or tabs;
separator characters, such as
( ) < > @ , ; : \ " / [ ] ? = { }
$raw
매개변수를 true
로 설정하면 이 검증은 엄격하게 수행됩니다.
이는 PHP의 setcookie
와 setrawcookie
가 잘못된 이름의 쿠키를 거부하기 때문입니다.
또한 쿠키 이름은 빈 문자열일 수 없습니다.
접두사 속성 유효성 검사
__Secure-
접두사를 사용할 경우 $secure
플래그가 true
로 설정된 상태로 쿠키를 설정해야 합니다.
__Host-
접두사를 사용하는 경우 쿠키에 다음을 표시해야 합니다.
$secure
flag set totrue
$domain
is empty$path
must be/
SameSite 속성 검증
SameSite 속성은 세 개의 값만 허용합니다:
Lax: 쿠키는 일반적인 교차 사이트 하위 요청(예: 이미지 또는 프레임을 타사 사이트에 로드하는 경우)에는 전송되지 않지만, 사용자가 원본 사이트(즉, 링크를 따라갈 때)로 이동할 때는 전송됩니다.
Strict: 쿠키는 제1자 컨텍스트로만 전송되며, 타사 웹 사이트에서 시작한 요청과 함께 전송되지 않습니다.
None: 쿠키는 모든 컨텍스트(예: 자사 및 교차 출처 요청에 대한 응답) 대해 전송됩니다.
그러나 CodeIgniter를 사용하면 SameSite 속성을 빈 문자열로 설정할 수 있습니다.
빈 문자열이 제공되면 Cookie
클래스에 저장된 기본 SameSite 설정이 사용됩니다.
위에서 설명한 대로 Cookie::setDefaults()
를 사용하여 기본 SameSite를 변경할 수 있습니다.
최신 쿠키 사양이 변경되어 최신 브라우저가 아무것도 제공되지 않은 경우 기본 SameSite를 제공해야 합니다.
이 기본값은 Lax
입니다.
SameSite를 빈 문자열로 설정하고 기본 SameSite도 빈 문자열인 경우 쿠키에 Lax
값이 지정됩니다.
만일 SameSite가 None
으로 설정되었다면 Secure
도 true
로 설정되었는지 확인해야 합니다.
SameSite 속성을 쓸 때 Cookie
클래스는 모든 값을 대소문자를 구분하지 않고 받아들입니다.
번거롭지 않게 클래스의 상수를 활용하는 방법도 있습니다.
<?php
use CodeIgniter\Cookie\Cookie;
Cookie::SAMESITE_LAX; // 'lax'
Cookie::SAMESITE_STRICT; // 'strict'
Cookie::SAMESITE_NONE; // 'none'
쿠키 저장소(Store) 사용
CookieStore
클래스는 Cookie
개체의 불변의 컬렉션을 나타냅니다.
CookieStore
인스턴스는 현재 Response` 개체에서 액세스할 수 있습니다.
<?php
use Config\Services;
$cookieStore = Services::response()->getCookieStore();
CodeIgniter는 새로운 CookieStore
인스턴스를 만드는 세 가지 다른 방법을 제공합니다.
<?php
use CodeIgniter\Cookie\Cookie;
use CodeIgniter\Cookie\CookieStore;
// Passing an array of `Cookie` objects in the constructor
$store = new CookieStore([
new Cookie('login_token'),
new Cookie('remember_token'),
]);
// Passing an array of `Set-Cookie` header strings
$store = CookieStore::fromCookieHeaders([
'remember_token=me; Path=/; SameSite=Lax',
'login_token=admin; Path=/; SameSite=Lax',
]);
// using the global `cookies` function
$store = cookies([new Cookie('login_token')], false);
// retrieving the `CookieStore` instance saved in our current `Response` object
$store = cookies();
Note
전역 cookies()
함수를 사용할 때, 전달된 Cookie
배열은 두 번째 인수인 $getGlobal`\ 이 ``false
로 설정된 경우에만 고려됩니다.
저장소에서 쿠키 확인
CookieStore
인스턴스에 Cookie
개체가 있는지 확인하려면 여러 가지 방법을 사용할 수 있습니다.
<?php
use CodeIgniter\Cookie\Cookie;
use CodeIgniter\Cookie\CookieStore;
use Config\Services;
// check if cookie is in the current cookie collection
$store = new CookieStore([
new Cookie('login_token'),
new Cookie('remember_token'),
]);
$store->has('login_token');
// check if cookie is in the current Response's cookie collection
cookies()->has('login_token');
Services::response()->hasCookie('remember_token');
// using the cookie helper to check the current Response
// not available to v4.1.1 and lower
helper('cookie');
has_cookie('login_token');
저장소에서 쿠키 받기
쿠키 컬렉션에서 Cookie
인스턴스를 검색하는 것은 매우 쉽습니다.
<?php
use CodeIgniter\Cookie\Cookie;
use CodeIgniter\Cookie\CookieStore;
use Config\Services;
// getting cookie in the current cookie collection
$store = new CookieStore([
new Cookie('login_token'),
new Cookie('remember_token'),
]);
$store->get('login_token');
// getting cookie in the current Response's cookie collection
cookies()->get('login_token');
Services::response()->getCookie('remember_token');
// using the cookie helper to get cookie from the Response's cookie collection
helper('cookie');
get_cookie('remember_token');
CookieStore
에서 잘못된 이름으로 직접 Cookie
인스턴스를 받으면 CookieException
예외를 발생시킵니다.
<?php
// throws CookieException
$store->get('unknown_cookie');
Response
의 쿠키 컬렉션에서 잘못된 이름으로 Cookie
인스턴스를 가져오면 null
로 반환됩니다.
<?php
cookies()->get('unknown_cookie'); // null
Response
에서 쿠키를 가져올 때 인수가 제공되지 않으면 저장 중인 Cookie
개체가 모두 표시됩니다.
<?php
cookies()->get(); // array of Cookie objects
// alternatively, you can use the display method
cookies()->display();
// or even from the Response
Services::response()->getCookies();
Note
get_cookie()
헬퍼 함수는 Response
가 아닌 Request
개체에서 쿠키를 가져옵니다.
이 함수는 쿠키가 설정되어 있으면 $_COOKIE 배열을 확인한 후 바로 가져옵니다.
저장소에 쿠키 추가/제거
앞서 언급했듯이, CookieStore
객체는 변경 불가능합니다.
수정 작업을 하려면 수정된 인스턴스를 저장해야 합니다.
원래 인스턴스는 변경되지 않은 상태로 유지됩니다.
<?php
use CodeIgniter\Cookie\Cookie;
use CodeIgniter\Cookie\CookieStore;
use Config\Services;
$store = new CookieStore([
new Cookie('login_token'),
new Cookie('remember_token'),
]);
// adding a new Cookie instance
$new = $store->put(new Cookie('admin_token', 'yes'));
// removing a Cookie instance
$new = $store->remove('login_token');
Note
스토어에서 쿠키를 제거하면 브라우저에서 쿠키가 삭제되지 않습니다. 브라우저에서 쿠키를 삭제하려면 동일한 이름의 빈 값 쿠키를 저장소에 넣어야합니다.
Response
개체에 저장 중인 쿠키와 상호 작용할 때 쿠키 컬렉션의 불변성을 걱정하지 않고 안전하게 쿠키를 추가하거나 삭제할 수 있습니다.
Response
개체는 인스턴스를 수정된 인스턴스로 바꿉니다.
<?php
use Config\Services;
Services::response()->setCookie('admin_token', 'yes');
Services::response()->deleteCookie('login_token');
// using the cookie helper
helper('cookie');
set_cookie('admin_token', 'yes');
delete_cookie('login_token');
스토어 내 쿠키 발송
쿠키를 수동으로 보낼 때 CodeIgniter가 이 작업을 수행하므로 신경 쓸 필요가 없습니다.
그러나 쿠키를 수동으로 보내야 하는 경우에는 dispatch
메소드를 사용해야 합니다.
다른 헤더를 보낼 때와 마찬가지로 headers_sent()
값을 확인하여 헤더를 아직 전송되지 않았는지 확인해야 합니다.
<?php
use CodeIgniter\Cookie\Cookie;
use CodeIgniter\Cookie\CookieStore;
$store = new CookieStore([
new Cookie('login_token'),
new Cookie('remember_token'),
]);
$store->dispatch(); // After dispatch, the collection is now empty.
쿠키 개인화
쿠키 개체의 원활한 생성을 위해 Cookie
클래스 내에 올바른 기본값이 이미 있습니다.
그러나 app/Config/Cookie.php
파일의 Config\Cookie
클래스에서 다음 설정을 변경하여 사용자 자신의 설정을 정의할 수 있습니다.
Setting |
Options/ Types |
Default |
Description |
---|---|---|---|
$prefix |
|
|
쿠키 이름 앞에 붙일 접두사. |
$expires |
|
|
만료 타임스탬프. |
$path |
|
|
쿠키의 경로 속성. |
$domain |
|
|
쿠키의 도메인 속성, 슬래시를 사용합니다. |
$secure |
|
|
보안 HTTPS를 통해 전송하는지 여부. |
$httponly |
|
|
JavaScript 액세스할 수 있는지 여부. |
$samesite |
|
|
SameSite 속성. |
$raw |
|
|
|
런타임에 Cookie::setDefaults()
메소드를 사용하여 수동으로 새 기본값을 제공할 수 있습니다.
Class Reference
- class CodeIgniter\Cookie\Cookie
- static setDefaults([$config = []])
- Parameters
$config (
ConfigCookie|array
) – 구성 배열 또는 인스턴스
- Return type
array
- Returns
이전 기본값
\Config\Cookie
구성 또는 배열의 값을 주입하여 기본 속성을 Cookie 인스턴스에 설정합니다.
- static fromHeaderString(string $header[, bool $raw = false])
- Parameters
$header (
string
) –Set-Cookie
헤더 문자열$raw (
bool
) – 쿠키가 URL로 인코딩되어setrawcookie()
를 통해 전송되지 않는지 여부
- Return type
Cookie
- Returns
Cookie
instance- Throws
CookieException
Set-Cookie
헤더에 새 쿠키 인스턴스를 만듭니다.
- __construct(string $name[, string $value = ''[, array $options = []]])
- Parameters
$name (
string
) – 쿠키 이름$value (
string
) – 쿠키 값$options (
array
) – 쿠키 옵션
- Return type
Cookie
- Returns
Cookie
instance- Throws
CookieException
Construct a new Cookie instance.
- getId()
- Return type
string
- Returns
쿠키 컬렉션에서 인덱싱하는 데 사용되는 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])
- Parameters
$raw (
bool
) –
- Return type
Cookie
- Returns
new
Cookie
instance
URL 인코딩 옵션으로 업데이트된 새 쿠키를 만듭니다.
- withPrefix([string $prefix = ''])
- Parameters
$prefix (
string
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 접두사를 사용하여 새 쿠키를 만듭니다.
- withName(string $name)
- Parameters
$name (
string
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 이름으로 새 쿠키를 만듭니다.
- withValue(string $value)
- Parameters
$value (
string
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 값으로 새 쿠키를 만듭니다.
- withExpires($expires)
- Parameters
$expires (
DateTimeInterface|string|int
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 쿠키 만료 시간을 사용하여 새 쿠키를 만듭니다.
- withExpired()
- Return type
Cookie
- Returns
new
Cookie
instance
브라우저에서 만료되는 새 쿠키를 만듭니다.
- withNeverExpiring()
Important
이 메소드는 더 이상 사용되지 않습니다. 향후 릴리스에서 제거될 예정입니다.
- Parameters
$name (
string
) –
- Return type
Cookie
- Returns
new
Cookie
instance
사실상 만료되지 않는 새 쿠키를 만듭니다.
- withDomain(?string $domain)
- Parameters
$domain (
string|null
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 도메인을 사용하여 새 쿠키를 만듭니다.
- withPath(?string $path)
- Parameters
$path (
string|null
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 경로로 새 쿠키를 만듭니다.
- withSecure([bool $secure = true])
- Parameters
$secure (
bool
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 “Secure” 특성을 가진 새 쿠키를 만듭니다.
- withHTTPOnly([bool $httponly = true])
- Parameters
$httponly (
bool
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 “HttpOnly” 특성을 사용하여 새 쿠키를 만듭니다.
- withSameSite(string $samesite)
- Parameters
$samesite (
string
) –
- Return type
Cookie
- Returns
new
Cookie
instance
새 “SameSite” 특성을 가진 새 쿠키를 만듭니다.
- toHeaderString()
- Return type
string
- Returns
헤더 문자열로 전달할 수 있는 문자열 표현을 반환합니다.
- toArray()
- Return type
array
- Returns
쿠키 인스턴스의 배열 표현을 반환합니다.
- class CodeIgniter\Cookie\CookieStore
- static fromCookieHeaders(array $headers[, bool $raw = false])
- Parameters
$header (
array
) – Array ofSet-Cookie
headers$raw (
bool
) – URL 인코딩 사용 여부
- Return type
CookieStore
- Returns
CookieStore
instance- Throws
CookieException
Set-Cookie
헤더 배열을 이용하여 쿠키 저장소를 만듭니다.
- __construct(array $cookies)
- Parameters
$cookies (
array
) – Array ofCookie
objects
- Return type
CookieStore
- Returns
CookieStore
instance- Throws
CookieException
- has(string $name[, string $prefix = ''[, ?string $value = null]]) → bool
- Parameters
$name (
string
) – 쿠키 이름$prefix (
string
) – 쿠키 접두사$value (
string|null
) – 쿠키 값
- Return type
bool
- Returns
이름 및 접두사로 식별된
Cookie
개체가 컬렉션에 있는지 확인합니다.
- get(string $name[, string $prefix = '']) → Cookie
- Parameters
$name (
string
) – 쿠키 이름$prefix (
string
) – 쿠키 접두사
- Return type
Cookie
- Returns
이름 및 접두사로 식별된 쿠키 인스턴스를 검색합니다.
- Throws
CookieException
- put(Cookie $cookie) → CookieStore
- Parameters
$cookie (
Cookie
) – 쿠키 객체
- Return type
CookieStore
- Returns
new
CookieStore
instance
Store a new cookie and return a new collection. The original collection is left unchanged.
- remove(string $name[, string $prefix = '']) → CookieStore
- Parameters
$name (
string
) – 쿠키 이름$prefix (
string
) – 쿠키 접두사
- Return type
CookieStore
- Returns
new
CookieStore
instance
컬렉션에서 쿠키를 제거하고 업데이트된 컬렉션을 반환합니다. 원본 컬렉션은 변경되지 않은 상태로 유지됩니다.
- dispatch() → void
- Return type
void
저장 중인 모든 쿠키를 보냅니다.
- display() → array
- Return type
array
- Returns
저장 중인 모든 쿠키 인스턴스를 반환합니다.
- clear() → void
- Return type
void
쿠키 컬렉션을 지웁니다.