文系Webエンジニアの技術メモとたまに旅のメモ

未経験文系エンジニアとして働いてます。アウトプットとして簡単に技術メモを残していきます。たまに旅関係のも趣味で残していこうと思ってます。

【CakePHP3/session】CakePHP3系でのsessionへのアクセスと使用方法

今回は、CakePHP3系でsessionへのアクセス方法を記していきます。

1.sessionへのアクセス方法

CakePHP3のバージョンによって、sessionへのアクセス方法が違うので、確認をしていきましょう。
3.6以降であれば両方使えますが、新しい方を使うの方が良いかと思います。

testController.php
<?php
// CakePHP 〜 3.5系
$session1 = $this->request->session();
/ CakePHP 3.6系 〜
$session2 = $this->getRequest->getSession();
?>

2.sessionへの書き込み

sessionへ値を保管したい場合は、「write」を下記の様に使用します。

testController.php
<?php
$session->write('Config.language', 'en');
$session->write('Config', 'en');
$session->write('{アクセス用のキー}', '{値}');
?>

配列を使用すれば、1回で複数sessionに書き込みをすることもできます。

testController.php
<?php
$session->write([
    'Config.language' => 'en',
    'Config', 'en'
]);
$session->write(['{キー1}' => {1}, {キー2} => {2}]);
?>

3.sessionの読み込み

sessionの値を読み込みたい場合は、「read」を下記の様に使用します。
今回は上記で書き込んだ内容を取得します。

testController.php
<?php
// en を取得
$session->read('Config.language');
$session->read('{アクセス用のキー}');
?>

4.sessionの削除

sessionの削除には2パターンあります。
「delete」と「consume」です。

testController.php
<?php
// 値を削除
$session->delete('Config.language');
// 値を取得後、削除 (read + deleteの様なイメージ)
$language = $session->consume('Config.language');
?>

この2つには下記違いがあるので、使い分けをしましょう。
delete:セッションの値を削除する (値は取得しない)
consume:セッションの値を取得後、削除する

5.sessionデータの存在確認

sessionにデータが入っているか確認する場合は、「check」を使用します。

testController.php
<?php
// キーに値が入っていれば true
$session->check('Config.language')
// if文での判定などに使いましょう。
if ($session->check('Config.language')) {
    // Config.languageに値が入っていれば実行される
}
?>

以上の5つがセッションでよく使う内容になります。
入力フォームの維持や、ログイン等でセッションは良く使われるので、
用途にあったセッションを使用していきましょう!