|
| 1 | +Cookie |
| 2 | +###### |
| 3 | + |
| 4 | +.. php:class:: CookieComponent(ComponentCollection $collection, array $settings = array()) |
| 5 | +
|
| 6 | +Cookie コンポーネントは PHP に組み込まれている ``setcookie`` メソッドに関連するラッパーです。 |
| 7 | +コントローラーで Cookie を使ったコーディングをするのにとても便利な糖衣構文も多数含んでいます。 |
| 8 | +Cookie コンポーネントを使おうとする前に、コントローラーの $components の配列に 'Cookie' を必ず加えてください。 |
| 9 | + |
| 10 | + |
| 11 | +コントローラーのセットアップ |
| 12 | +================ |
| 13 | + |
| 14 | +Cookie の発行や操作の設定をすることができる値を以下に示します。これらの値によって |
| 15 | +Cookie コンポーネントがどのように動くかは、コントローラーの beforeFilter() メソッドでも特別に設定できます。 |
| 16 | + |
| 17 | ++-----------------+--------------+------------------------------------------------------+ |
| 18 | +| Cookie の変数 | 規定値 | 内容 | |
| 19 | ++=================+==============+======================================================+ |
| 20 | +| string $name |'CakeCookie' | Cookie の名前です。 | |
| 21 | ++-----------------+--------------+------------------------------------------------------+ |
| 22 | +| string $key | null | この文字列は Cookie の値を暗号化するために使われます。 | |
| 23 | +| | | ランダムで特定されにくい文字列を使うべきです。 | |
| 24 | +| | | | |
| 25 | +| | | Rijndael 暗号化を使うときは32バイトより長い値にしなければなりません。| |
| 26 | ++-----------------+--------------+------------------------------------------------------+ |
| 27 | +| string $domain | '' | Cookie を読むことができるドメインの名前を設定します。たとえば、 | |
| 28 | +| | | '.yourdomain.com' を使うと、あなたのサブドメイン全体 | |
| 29 | +| | | からのアクセスを許可します。 | |
| 30 | ++-----------------+--------------+------------------------------------------------------+ |
| 31 | +| int または string | '5 Days' | Cookie が無効になる時間を設定します。整数ならば秒として解釈され、 | |
| 32 | +| $time | | 0であればセッション Cookie として評価されます。すなわち、ブラウザを| |
| 33 | +| | | 終了したときに破棄されます。文字列を設定したときは、 PHP の | |
| 34 | +| | | strtotime() 関数を使って解釈されます。 write() メソッドの中で | |
| 35 | +| | | 直接設定することもできます。 | |
| 36 | ++-----------------+--------------+------------------------------------------------------+ |
| 37 | +| string $path | '/' | Cookie が適用されるサーバーのパスを設定します。 $path に '/foo/' | |
| 38 | +| | | を設定した場合、この Cookie は、あなたのドメインの /foo/ と、 | |
| 39 | +| | | それ以下にあるすべてのサブディレクトリ( /foo/bar など) で有効に | |
| 40 | +| | | なります。既定ではドメイン全体で有効です。 write() メソッドで | |
| 41 | +| | | 直接指定することもできます。 | |
| 42 | ++-----------------+--------------+------------------------------------------------------+ |
| 43 | +| boolean $secure | false | セキュアな HTTPS 接続を通してのみ Cookie を伝送するかを設定 | |
| 44 | +| | | します。 true に設定すると、セキュアな接続が確立しているときにのみ | |
| 45 | +| | | Cookie を発行するようになります。 write() メソッドで直接指定する | |
| 46 | +| | | こともできます。 | |
| 47 | ++-----------------+--------------+------------------------------------------------------+ |
| 48 | +| boolean | false | true に設定すると HTTP のみで有効な Cookie を作成します。これらの| |
| 49 | +| $httpOnly | | Cookie は Javascript からアクセスすることはできません。 | |
| 50 | ++-----------------+--------------+------------------------------------------------------+ |
| 51 | + |
| 52 | +以下のサンプルコードは、 Cookie コンポーネントをコントローラーにインクルードする方法と、 |
| 53 | +セキュアな接続でのみ、 'example.com' というドメインの ‘/bakers/preferences/’ |
| 54 | +というパス以下で、1時間だけ有効な 'baker\_id' という名前の HTTP のみで有効な |
| 55 | +Cookie の初期設定をするための例です。:: |
| 56 | + |
| 57 | + public $components = array('Cookie'); |
| 58 | + public function beforeFilter() { |
| 59 | + parent::beforeFilter(); |
| 60 | + $this->Cookie->name = 'baker_id'; |
| 61 | + $this->Cookie->time = 3600; // または '1 hour' |
| 62 | + $this->Cookie->path = '/bakers/preferences/'; |
| 63 | + $this->Cookie->domain = 'example.com'; |
| 64 | + $this->Cookie->secure = true; // セキュアな HTTPS で接続している時のみ発行されます |
| 65 | + $this->Cookie->key = 'qSI232qs*&sXOw!adre@34SAv!@*(XSL#$%)asGb$@11~_+!@#HKis~#^'; |
| 66 | + $this->Cookie->httpOnly = true; |
| 67 | + } |
| 68 | + |
| 69 | +それでは、その他の Cookie コンポーネントのメソッドの使い方を見ていきましょう。 |
| 70 | + |
| 71 | +コンポーネントの使い方 |
| 72 | +================ |
| 73 | + |
| 74 | +CookieComponent は Cookie を使った動作をするためにいくつかのメソッドを提供します。 |
| 75 | + |
| 76 | +.. php:method:: write(mixed $key, mixed $value = null, boolean $encrypt = true, mixed $expires = null) |
| 77 | +
|
| 78 | + write() は Cookie コンポーネントの中核をなすメソッドです。 $key は必要な Cookie の値につける名前を、 |
| 79 | + $value は保存しておきたい情報を設定します。:: |
| 80 | + |
| 81 | + $this->Cookie->write('name', 'Larry'); |
| 82 | + |
| 83 | + $key にドット記法を使うことで値をグルーピングすることもできます。:: |
| 84 | + |
| 85 | + $this->Cookie->write('User.name', 'Larry'); |
| 86 | + $this->Cookie->write('User.role', 'Lead'); |
| 87 | + |
| 88 | + 一度に2つ以上の Cookie を書き込みたい場合は、配列を渡すことができます。:: |
| 89 | + |
| 90 | + $this->Cookie->write('User', |
| 91 | + array('name' => 'Larry', 'role' => 'Lead') |
| 92 | + ); |
| 93 | + |
| 94 | + すべての Cookie の値は、既定では暗号化されます。平文で値を保存したい場合は、3つ目の引数に |
| 95 | + false を設定します。 Cookie の値は非常に単純な暗号化システムで暗号化されます。値の暗号化には、 |
| 96 | + Configure クラスで予め定義された値である ``Security.salt`` と ``Security.cipherSeed`` |
| 97 | + が使われます。よりよい暗号化をして Cookie をよりセキュアにするためには、 app/Config/core.php の |
| 98 | + ``Security.cipherSeed`` を変更することをおすすめします。:: |
| 99 | + |
| 100 | + $this->Cookie->write('name', 'Larry', false); |
| 101 | + |
| 102 | + 最後の引数 $expires は無効になる秒数を数値で指定します。使いやすくするために、 |
| 103 | + PHP の関数 strtotime() が解釈できる文字列を渡すこともできます。:: |
| 104 | + |
| 105 | + // いずれの Cookie も1時間で無効になります。 |
| 106 | + $this->Cookie->write('first_name', 'Larry', false, 3600); |
| 107 | + $this->Cookie->write('last_name', 'Masters', false, '1 hour'); |
| 108 | + |
| 109 | +.. php:method:: read(mixed $key = null) |
| 110 | +
|
| 111 | + このメソッドは、 $key で指定した名前をつけた Cookie の値を得るために使われます。:: |
| 112 | + |
| 113 | + // “Larry” を出力します |
| 114 | + echo $this->Cookie->read('name'); |
| 115 | + |
| 116 | + // ドット記法も使うことができます |
| 117 | + echo $this->Cookie->read('User.name'); |
| 118 | + |
| 119 | + // ドット記法でグループにした値を配列として得る場合、例えば、 |
| 120 | + $this->Cookie->read('User'); |
| 121 | + |
| 122 | + // であれば、array('name' => 'Larry', 'role' => 'Lead') のような出力結果となります |
| 123 | + |
| 124 | +.. php:method:: check($key) |
| 125 | +
|
| 126 | + :param string $key: 確認のためのキー。 |
| 127 | + |
| 128 | + key/path が存在し、値が null でない事を確認するために使われます。 |
| 129 | + |
| 130 | + .. versionadded:: 2.3 |
| 131 | + ``CookieComponent::check()`` は 2.3 で追加されました。 |
| 132 | + |
| 133 | +.. php:method:: delete(mixed $key) |
| 134 | +
|
| 135 | + $key で指定した名前のCookieの値を削除します。ドット記法を使うことができます。:: |
| 136 | + |
| 137 | + // ひとつの値を削除 |
| 138 | + $this->Cookie->delete('bar'); |
| 139 | + |
| 140 | + // barという値を削除しますが、foo以下のすべてを削除するわけではありません |
| 141 | + $this->Cookie->delete('foo.bar'); |
| 142 | + |
| 143 | +.. php:method:: destroy() |
| 144 | +
|
| 145 | + 現在の Cookie を破棄します。 |
| 146 | + |
| 147 | +.. php:method:: type($type) |
| 148 | +
|
| 149 | + 暗号化の方法を変更することができます。規定では 'cipher' 方式が使われます。しかし、 |
| 150 | + より安全にするためには 'rijndael' 方式を使うべきです。 |
| 151 | + |
| 152 | + .. versionchanged:: 2.2 |
| 153 | + 'rijndael' タイプが追加されました。 |
| 154 | + |
| 155 | + |
| 156 | +.. meta:: |
| 157 | + :title lang=en: Cookie |
| 158 | + :keywords lang=en: array controller,php setcookie,cookie string,controller setup,string domain,default description,string name,session cookie,integers,variables,domain name,null |
0 commit comments