Cookies

An HTTP cookie (web cookie, browser cookie) is a small piece of data that a server sends to the user’s web browser. The browser may store it and send it back with later requests to the same server. Typically, it’s used to tell if two requests came from the same browser — keeping a user logged-in, for example. It remembers stateful information for the stateless HTTP protocol.

Cookies are mainly used for three purposes:

  • Session management: Logins, shopping carts, game scores, or anything else the server should remember
  • Personalization: User preferences, themes, and other settings
  • Tracking: Recording and analyzing user behavior

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.

Creating Cookies

There are currently four (4) ways to create a new Cookie value object.

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');

When constructing the Cookie object, only the name attribute is required. All other else are optional. If the optional attributes are not modified, their values will be filled up by the default values saved in the Cookie class. To override the defaults currently stored in the class, you can pass a Config\Cookie instance or an array of defaults to the static Cookie::setDefaults() method.

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

// pass in an 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');

Passing the Config\Cookie instance or an array to Cookie::setDefaults() will effectively overwrite your defaults and will persist until new defaults are passed. If you do not want this behavior but only want to change defaults for a limited time, you can take advantage of Cookie::setDefaults() return which returns the old defaults array.

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);

Immutable Cookies

A new Cookie instance is an immutable value object representation of an HTTP cookie. Being immutable, modifying any of the instance’s attributes will not affect the original instance. The modification always returns a new instance. You need to retain this new instance in order to use it.

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'

Class Reference

CodeIgniter\HTTP\Cookie\Cookie
static setDefaults([$config = []])
參數:
  • $config (ConfigCookie|array) – The configuration array or instance
傳回型態:

array<string, mixed>

傳回:

The old defaults

Set the default attributes to a Cookie instance by injecting the values from the \Config\Cookie config or an array.

static fromHeaderString(string $header[, bool $raw = false])
參數:
  • $header (string) – The Set-Cookie header string
  • $raw (bool) – Whether this cookie is not to be URL encoded and sent via setrawcookie()
傳回型態:

Cookie

傳回:

Cookie instance

Throws:

CookieException

Create a new Cookie instance from a Set-Cookie header.

__construct(string $name[, string $value = ''[, array $options = []]])
參數:
  • $name (string) – The cookie name
  • $value (string) – The cookie value
  • $options (array) – The cookie options
傳回型態:

Cookie

傳回:

Cookie instance

Throws:

CookieException

Construct a new Cookie instance.

getId()
傳回型態:string
傳回:The ID used in indexing in the cookie collection.
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

傳回:

new Cookie instance

Creates a new Cookie with URL encoding option updated.

withPrefix([string $prefix = ''])
參數:
  • $prefix (string) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new prefix.

withName(string $name)
參數:
  • $name (string) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new name.

withValue(string $value)
參數:
  • $value (string) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new value.

withExpires($expires)
參數:
  • $expires (DateTimeInterface|string|int) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new cookie expires time.

withExpired()
傳回型態:Cookie
傳回:new Cookie instance

Creates a new Cookie that will expire from the browser.

withNeverExpiring()
參數:
  • $name (string) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie that will virtually never expire.

withDomain(?string $domain)
參數:
  • $domain (string|null) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new domain.

withPath(?string $path)
參數:
  • $path (string|null) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new path.

withSecure([bool $secure = true])
參數:
  • $secure (bool) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new 「Secure」 attribute.

withHTTPOnly([bool $httponly = true])
參數:
  • $httponly (bool) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new 「HttpOnly」 attribute.

withSameSite(string $samesite)
參數:
  • $samesite (string) –
傳回型態:

Cookie

傳回:

new Cookie instance

Creates a new Cookie with new 「SameSite」 attribute.

toHeaderString()
傳回型態:string
傳回:Returns the string representation that can be passed as a header string.
toArray()
傳回型態:array
傳回:Returns the array representation of the Cookie instance.
CodeIgniter\HTTP\Cookie\CookieStore
static fromCookieHeaders(array $headers[, bool $raw = false])
參數:
  • $header (array) – Array of Set-Cookie headers
  • $raw (bool) – Whether not to use URL encoding
傳回型態:

CookieStore

傳回:

CookieStore instance

Throws:

CookieException

Creates a CookieStore from an array of Set-Cookie headers.

__construct(array $cookies)
參數:
  • $cookies (array) – Array of Cookie objects
傳回型態:

CookieStore

傳回:

CookieStore instance

Throws:

CookieException

has(string $name[, string $prefix = ''[, ?string $value = null]]): bool
參數:
  • $name (string) – Cookie name
  • $prefix (string) – Cookie prefix
  • $value (string|null) – Cookie value
傳回型態:

bool

傳回:

Checks if a Cookie object identified by name and prefix is present in the collection.

get(string $name[, string $prefix = '']): Cookie
參數:
  • $name (string) – Cookie name
  • $prefix (string) – Cookie prefix
傳回型態:

Cookie

傳回:

Retrieves an instance of Cookie identified by a name and prefix.

Throws:

CookieException

put(Cookie $cookie): CookieStore
參數:
  • $cookie (Cookie) – A Cookie object
傳回型態:

CookieStore

傳回:

new CookieStore instance

Store a new cookie and return a new collection. The original collection is left unchanged.

remove(string $name[, string $prefix = '']): CookieStore
參數:
  • $name (string) – Cookie name
  • $prefix (string) – Cookie prefix
傳回型態:

CookieStore

傳回:

new CookieStore instance

Removes a cookie from a collection and returns an updated collection. The original collection is left unchanged.

dispatch(): void
傳回型態:void

Dispatches all cookies in store.

display(): array
傳回型態:array
傳回:Returns all cookie instances in store.
clear(): void
傳回型態:void

Clears the cookie collection.