Cookie
class CookieComponent(ComponentCollection $collection, array $settings = [])
Cookie コンポーネントは PHP に組み込まれている setcookie メソッドに関連するラッパーです。 コントローラーで Cookie を使ったコーディングをするのにとても便利な糖衣構文も多数含んでいます。 Cookie コンポーネントを使おうとする前に、コントローラーの $components の配列に 'Cookie' を必ず加えてください。
コントローラーのセットアップ
Cookie の発行や操作の設定をすることができる値を以下に示します。これらの値によって Cookie コンポーネントがどのように動くかは、コントローラーの beforeFilter() メソッドでも特別に設定できます。
| Cookie の変数 | 規定値 | 内容 |
|---|---|---|
| string $name | 'CakeCookie' | Cookie の名前です。 |
| string $key | null | この文字列は Cookie の値を暗号化するために使われます。 ランダムで特定されにくい文字列を使うべきです。 rijndael または aes 暗号化を使うときは32バイトより長い値にしなければなりません。デフォルトでは |
| string $domain | '' | Cookie を読むことができるドメインの名前を設定します。たとえば、 '.yourdomain.com' を使うと、あなたのサブドメイン全体 からのアクセスを許可します。 |
| int または string $time | '5 Days' | Cookie が無効になる時間を設定します。整数ならば秒として解釈され、 0であればセッション Cookie として評価されます。すなわち、ブラウザを 終了したときに破棄されます。文字列を設定したときは、 PHP の strtotime() 関数を使って解釈されます。 write() メソッドの中で 直接設定することもできます。 |
| string $path | '/' | Cookie が適用されるサーバーのパスを設定します。 $path に '/foo/' を設定した場合、この Cookie は、あなたのドメインの /foo/ と、 それ以下にあるすべてのサブディレクトリ( /foo/bar など) で有効に なります。既定ではドメイン全体で有効です。 write() メソッドで 直接指定することもできます。 |
| boolean $secure | false | セキュアな HTTPS 接続を通してのみ Cookie を伝送するかを設定 します。 true に設定すると、セキュアな接続が確立しているときにのみ Cookie を発行するようになります。 write() メソッドで直接指定する こともできます。 |
| boolean $httpOnly | false | true に設定すると HTTP のみで有効な Cookie を作成します。これらの Cookie は Javascript からアクセスすることはできません。 |
以下のサンプルコードは、 Cookie コンポーネントをコントローラーにインクルードする方法と、 セキュアな接続でのみ、 'example.com' というドメインの ‘/bakers/preferences/’ というパス以下で、1時間だけ有効な 'baker_id' という名前の HTTP のみで有効な Cookie を AES で暗号化して発行するための初期設定の例です。
// src/Controller/BakersController.php
public $components = [
'Cookie' => ['type' => 'aes'],
];
public function beforeFilter()
{
parent::beforeFilter();
$this->Cookie->name = 'baker_id';
$this->Cookie->time = 3600; // または '1 hour'
$this->Cookie->path = '/bakers/preferences/';
$this->Cookie->domain = 'example.com';
$this->Cookie->secure = true; // セキュアな HTTPS で接続している時のみ発行されます
$this->Cookie->key = 'qSI232qs*&sXOw!adre@34SAv!@*(XSL#$%)asGb$@11~_+!@#HKis~#^';
$this->Cookie->httpOnly = true;
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
暗号化方式は $components の 'type' で設定します。beforeFilter() で $this->Cookie->type('aes'); を呼び出して設定することもできます。
Piece of Cake 2 fork
$components の 'type' は v2.12.3 から反映されます。v2.12.2 以前では無視され、 Cookie は 'cipher' で暗号化されていました。
'aes' 方式は Security::encrypt() を使います。mcrypt 拡張は PHP 7.2 以降同梱されておらず PECL から入れる必要があるため、config/core.php で OpenSSL による実装を有効にしてください。 pieceofcake2/app のスケルトン (v2.3.1 以降) から作成したアプリケーションにはこの行が含まれています。 既存のアプリケーションでは追加してください。
Configure::write('Security.useOpenSsl', true);それでは、その他の Cookie コンポーネントのメソッドの使い方を見ていきましょう。
コンポーネントの使い方
CookieComponent は Cookie を使った動作をするためにいくつかのメソッドを提供します。
method CookieComponent::write(mixed $key, mixed $value = null, boolean $encrypt = true, mixed $expires = null)
method CookieComponent::read(mixed $key = null)
method CookieComponent::check($key)
method CookieComponent::delete(mixed $key)
method CookieComponent::destroy()
method CookieComponent::type($type)
Cookie の値の暗号化方式を設定します。指定できるのは 'cipher'、'aes'、'rijndael' です。
WARNING
デフォルトの 'cipher' は後方互換性のためだけに残されている脆弱な XOR 暗号です。 上の例のように 'aes' を使い、Security.useOpenSsl も有効にしてください。'rijndael' には mcrypt 拡張が必要で、PHP 7.2 以降では PECL からインストールする必要があります。 暗号化方式を変更すると、変更前の方式で書き込まれた Cookie は読めなくなります。
