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のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。
-
-
CakePHP4の規約外のカラムをキーにアソシエーション(テーブル連結)する方法
CakePHPで規定外のカラム名のキーを指定してアソシエーション(テーブル連結)をする方法を解説。アソシエーション名によってはミスが発生しやすい点もあるので注意も必要。
-
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。
-
-
CakePHP3のcontroller内でテンプレート、レイアウトを変更する際の指定方法
CakePHP3でテンプレートファイルやレイアウトファイルをデフォルトのものから別のものに変更したい場合の指定方法を解説。
-
-
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。
-
-
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。
-
-
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。
-
-
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。