CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でCookieを保存、呼び出し、削除の操作
CakePHP3では Cookieの仕様が度々変更されている
システム開発において、Cookieは便利で役に立つ機能です。
ですが、CakePHP3ではその Cookieの使用方法がたびたび変更されています。
さらには、その使用方法が Cookbookなどのドキュメントへの反映されるのが遅れているようで、どうやって使えばいいのか混乱が広がっているようです。
というわけで、CakePHP3.7で Cookieを使う方法を解説します。
Cookieを使うために use句を指定
まず、Cookieを使うためには下記の use句を追加します。
1 2 |
use Cake\Http\Cookie\Cookie; use Cake\I18n\Time; |
「use Cake\I18n\Time
」の方は、Cookieの有効期限を「+1 year」のように指定するためのものです。
具体的な日時を指定する場合は必要ありません。
Cookieに値を保存する方法
Cookieに値を保存する場合は、下記のように記述します。
「key」が Cookieの変数名を指定するところで、「value」が Cookieに保存する値を指定するところです。
1 |
$this->response = $this->response->withCookie(new Cookie("key","value")); |
これだけでは、ブラウザを閉じると Cookieが消えてしまいますので、Cookieの有効時間等を指定する場合は下記のように指定します。
1 |
$this->response = $this->response->withCookie(new Cookie("key","value",new Time("+1 year"),"/","example.com",false,false)); |
上記を分かりやすくビルダーメソッドを使用して記述する場合は以下のようになります。
1 2 3 4 5 6 7 8 |
$cookie = (new Cookie("key")) ->withValue("value") ->withExpiry(new Time("+1 year")) ->withPath("/") ->withDomain("example.com") ->withSecure(false) ->withHttpOnly(false); $this->response = $this->response->withCookie($cookie); |
1項目目、キーの設定
Cookieを保存するキー(変数名)を指定します。
必須項目です。
2項目目、withValue()
Cookieに保存する値を指定します。
値、項目がない場合は、該当のキーの Cookieを削除します。(保存してある Cookieを削除します。)
3項目目、withExpiry()
Cookieを保持する有効期限を指定します。
指定しない場合は、ブラウザを閉じるまでが有効期限になります。
上記のサンプルは「+1 year」を指定していますので、1年間有効になります。
同様の記述の場合は、アクセスの度に Cookieの有効期限がアクセス日時の 1年後に更新されます。
また、「2019-01-01 12:00:00」のように具体的な日時を指定することもできます。
「2019-01-01」のように時間を指定しない場合は「00:00:00」がデフォルトでセットされます。
過去日を指定した場合は、該当のキーの Cookieを削除します。(保存してある Cookieを削除します。)
4項目目、withPath()
Cookieを有効とするパスを指定します。
特定のフォルダの中でのみ Cookieが有効となるようにしたい場合は、そのフォルダを指定します。
指定しない場合のデフォルト値は「/」で、サイト全体が有効になっています。
5項目目、withDomain()
Cookieを有効とするドメインを指定します。
指定がある場合は、記述があるドメインでのみ Cookieが有効になります。
指定がない場合のデフォルト値は「””」で、ドメインに関係なく Cookieは有効になります。
ちなみに、XAMPPなどのローカル環境では「localhost」を指定します。
(「http://localhost:8080」などのポート番号付きでアクセスしている場合も「localhost」を指定します。)
6項目目、withSecure()
HTTPS接続のときのみ Cookieを扱うようにするか、しないか、を指定します。
デフォルトは「false」で、HTTPでも Cookieを利用できますが、「true」にするとセキュアな HTTPSでアクセスした場合のみ Cookieの生成、アクセスが可能になります。
7項目目、withHttpOnly()
HTTPによるアクセスのときのみアクセスができるようにするか、しないか、を指定します。
デフォルトは「false」です。「true」にすると JavaScriptから Cookieにはアクセスできなくなります。
Cookieに保存した値を取り出す方法
Cookieに保存した値を取り出す場合は、下記のように「getCookie()」を使います。
1 2 |
$cookieData = $this->request->getCookie("key"); echo $cookieData; |
Cookieを保存する場合は「response」ですが、値を取り出す場合は「response」ではなく「request」です。
「$_SERVER」を利用して確認する方法
デバッグ時など、Cookieに保存されている情報を確認したい場合は、下記の通り「$_SERVER」を利用する方法もあります。
1 |
print_r($_SERVER["HTTP_COOKIE"]); |
「$_COOKIE」を利用して確認する方法
デバッグ時など、Cookieに保存されている情報を確認したい場合は、下記の通り「$_COOKIE」を利用する方法もあります。
1 |
print_r($_COOKIE); |
「response」で保存した設定情報を含めて確認する方法
下記のように、Cookieを保存したあとであれば「response」でも保存した情報を確認することはできます。
1 2 3 |
$this->response = $this->response->withCookie(new Cookie("key","value"); $cookieData = $this->response->getCookie("key"); print_r($cookieData); |
Cookieを削除する方法
Cookieを削除する(保存してある Cookieを破棄する)場合は、下記の通り「withExpiredCookie()」を使用します。
1 |
$this->response = $this->response->withExpiredCookie(new Cookie("key")); |
また、すでに解説したように、Cookieを削除する方法として、Cookieを設定の記述で「withValue()」の項目を記述しない、「withExpiry()」の日時を過去日にする、といった方法もあります。
Cookieの仕様を改めて思い出す
Cookieの仕様として当たり前といえば当たり前なのですが、
・1回目の処理で Cookieを保存する
・2回目の処理で Cookieを取り出す
という処理になります。
なので、1回目のアクセスで Cookieに値を保存します。
そして、2回目のアクセスで Cookieに保存した値を取り出します。
そのため、Cookieに保存した値を取り出すにはプログラムを 2回実行する必要があります。(1回のアクセスでは、Cookieに保存して、その値を取り出すことは出来ません。)
最初、これを忘れていて「あれ??」とちょっと混乱してしまったこともありましたので、改めて Cookieの仕様を思い出しておくといいかもしれません。
CakePHP3の Cookieに関する参考記事
CakePHP3 Cookbook クッキー
https://book.cakephp.org/3.0/ja/controllers/components/cookie.html
CakePHP3 Cookbook リクエストとレスポンスオブジェクト・クッキー
https://book.cakephp.org/3.0/ja/controllers/request-response.html#request-cookies
https://book.cakephp.org/3.0/ja/controllers/request-response.html#id25
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5で指定したカラムに特定の値に該当のレコードの有無をチェックするにはexists()を使う。単純にカラムを指定する方法から複数条件をand、orで探すこともできる。
-
-
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP4、CakePHP3でブラウザにキャッシュさせる設定の解説。CSS、JavaScript、画像をブラウザにキャッシュさせるのか、定期的にリロードする設定にするのかの設定が可能。
-
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。
-
-
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。
-
-
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。
-
-
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。