エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応

   

CakePHP3でCookieを保存、呼び出し、削除の操作

 

CakePHP3では Cookieの仕様が度々変更されている

 
システム開発において、Cookieは便利で役に立つ機能です。
 
ですが、CakePHP3ではその Cookieの使用方法がたびたび変更されています。
さらには、その使用方法が Cookbookなどのドキュメントへの反映されるのが遅れているようで、どうやって使えばいいのか混乱が広がっているようです。
 
というわけで、CakePHP3.7で Cookieを使う方法を解説します。
 
 

Cookieを使うために use句を指定

 
まず、Cookieを使うためには下記の use句を追加します。
 

 
use Cake\I18n\Time」の方は、Cookieの有効期限を「+1 year」のように指定するためのものです。
具体的な日時を指定する場合は必要ありません。
 
 

Cookieに値を保存する方法

 
Cookieに値を保存する場合は、下記のように記述します。
「key」が Cookieの変数名を指定するところで、「value」が Cookieに保存する値を指定するところです。
 

 
これだけでは、ブラウザを閉じると Cookieが消えてしまいますので、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()」を使います。
 

 
Cookieを保存する場合は「response」ですが、値を取り出す場合は「response」ではなく「request」です。
 
 

「$_SERVER」を利用して確認する方法

 
デバッグ時など、Cookieに保存されている情報を確認したい場合は、下記の通り「$_SERVER」を利用する方法もあります。
 

 
 

「$_COOKIE」を利用して確認する方法

 
デバッグ時など、Cookieに保存されている情報を確認したい場合は、下記の通り「$_COOKIE」を利用する方法もあります。
 

 
 

「response」で保存した設定情報を含めて確認する方法

 
下記のように、Cookieを保存したあとであれば「response」でも保存した情報を確認することはできます。
 

 
 

Cookieを削除する方法

 
Cookieを削除する(保存してある Cookieを破棄する)場合は、下記の通り「withExpiredCookie()」を使用します。
 

 
また、すでに解説したように、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の関連記事

CakePHP3で環境変数を設定して本番環境と開発環境を分けて処理をする場合
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法

CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可

CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法

CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。

cakephp3 カスタムバリデーションを簡易的に実装する方法
cakephp3 カスタムバリデーションを簡易的に実装する方法

CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。

CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。