クッキー

HTTPクッキー(Webクッキー、ブラウザクッキー)は、サーバーがユーザーのWebブラウザーに送信する小さなデータです。ブラウザはそれを保存し、後で同じサーバーへのリクエストとともに送り返す場合があります。一般的に、2つのリクエストが同じブラウザから来たかどうかを判断するために使用されます。たとえば、ユーザーのログイン状態を維持します。ステートレスなHTTPプロトコルに対してステートフルな情報を記憶します。

クッキーは主に3つの目的で使用されます

  • セッション管理:ログイン、ショッピングカート、ゲームスコア、またはサーバーが記憶しておく必要のあるもの

  • パーソナライズ:ユーザー設定、テーマ、その他の設定

  • 追跡:ユーザー行動の記録と分析

ブラウザに効率的にクッキーを送信できるように、CodeIgniterはクッキーのやり取りを抽象化するためのCodeIgniter\Cookie\Cookieクラスを提供しています。

クッキーの作成

現在、新しいCookie値オブジェクトを作成する方法は4つあります。

<?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インスタンスは、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;
use Config\Services;

$response = Services::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) – 設定配列またはインスタンス

戻り値の型:

配列

戻り値:

古いデフォルト値

Config\Cookie 設定または配列から値を注入して、Cookie インスタンスにデフォルトの属性を設定します。

static fromHeaderString(string $header[, bool $raw = false])
パラメーター:
  • $header (string) – Set-Cookie ヘッダー文字列

  • $raw (bool) – このクッキーが URL エンコードされずに setrawcookie() で送信されるかどうか

戻り値の型:

クッキー

戻り値:

Cookie インスタンス

スロー:

CookieException

Set-Cookie ヘッダーから新しい Cookie インスタンスを作成します。

__construct(string $name[, string $value = ''[, array $options = []]])
パラメーター:
  • $name (string) – クッキー名

  • $value (string) – クッキー値

  • $options (array) – クッキー オプション

戻り値の型:

クッキー

戻り値:

Cookie インスタンス

スロー:

CookieException

新しい Cookie インスタンスを構築します。

getId()
戻り値の型:

文字列

戻り値:

クッキーコレクション内のインデックスに使用される 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 インスタンス

URLエンコードオプションを更新した新しいCookieを作成します。

withPrefix([string $prefix = ''])
パラメーター:
  • $prefix (string) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しいプレフィックスを持つ新しいCookieを作成します。

withName(string $name)
パラメーター:
  • $name (string) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しい名前を持つ新しいCookieを作成します。

withValue(string $value)
パラメーター:
  • $value (string) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しい値を持つ新しいCookieを作成します。

withExpires($expires)
パラメーター:
  • $expires (DateTimeInterface|string|int) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しいクッキーの有効期限を持つ新しいクッキーを作成します。

withExpired()
戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

ブラウザから有効期限が切れる新しいCookieを作成します。

withNeverExpiring()

バージョン4.2.6から非推奨。

重要

このメソッドは非推奨です。将来のリリースで削除されます。

パラメーター:
  • $name (string) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

事実上、有効期限が切れない新しいCookieを作成します。

withDomain(?string $domain)
パラメーター:
  • $domain (string|null) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しいドメインを持つ新しいCookieを作成します。

withPath(?string $path)
パラメーター:
  • $path (string|null) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しいパスを持つ新しいCookieを作成します。

withSecure([bool $secure = true])
パラメーター:
  • $secure (bool) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しい「Secure」属性を持つ新しいCookieを作成します。

withHTTPOnly([bool $httponly = true])
パラメーター:
  • $httponly (bool) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しい「HttpOnly」属性を持つ新しいCookieを作成します。

withSameSite(string $samesite)
パラメーター:
  • $samesite (string) –

戻り値の型:

クッキー

戻り値:

新しい Cookie インスタンス

新しい「SameSite」属性を持つ新しいCookieを作成します。

toHeaderString()
戻り値の型:

文字列

戻り値:

ヘッダ文字列として渡すことができる文字列表現を返します。

toArray()
戻り値の型:

配列

戻り値:

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 のインスタンスを取得します。

スロー:

CookieException

put(Cookie $cookie) CookieStore
パラメーター:
  • $cookie (Cookie) – Cookie オブジェクト

戻り値の型:

CookieStore

戻り値:

新しい CookieStore インスタンス

新しいクッキーを保存し、新しいコレクションを返します。元のコレクションは変更されません。

remove(string $name[, string $prefix = '']) CookieStore
パラメーター:
  • $name (string) – クッキー名

  • $prefix (string) – クッキーのプレフィックス

戻り値の型:

CookieStore

戻り値:

新しい CookieStore インスタンス

コレクションからクッキーを削除し、更新されたコレクションを返します。元のコレクションは変更されません。

dispatch() void
戻り値の型:

void

ストア内のすべてのクッキーをディスパッチします。

display() array
戻り値の型:

配列

戻り値:

ストア内のすべてのクッキーインスタンスを返します。

clear() void
戻り値の型:

void

クッキーコレクションをクリアします。