Session(ログイン状態の維持など)の継続時間を変更する【CakePHP4】

概要

CakePHP4では、公式ドキュメントを参考にログイン機能を実装すると、自動でブラウザにログイン状態を保持してくれます。

ログイン状態はSessionに保持されます。

しかし、このログイン状態の保持時間が短く、少し席を外したりすると、すぐに再ログインを求められてしまいます。

そこで今回は、これを延長する方法を紹介します。

コード

ログイン状態の保持時間を延長する方法は簡単です。

config/app.phpに下記のコードを追記するだけです。

//config/app.php

'Session' => [
        'defaults' => 'php',
        //以下を追記(単位は分。下記では2時間となる)
        'timeout' => 120, 
],

デフォルトでは何分なの?

デフォルトでは、ログイン状態の保持時間は体感30分弱だったのですが、これはどこで指定されているのでしょうか。
※ちなみに、先述のconfig/app.phpにはデフォルトでは’timeout’の指定はありませんでした。

というわけでコードを追ってみたところ、vendor/cakephp/cakephp/src/Http/Session.phpに以下のような記載がありました。

 $config += [
            'timeout' => null,
            'cookie' => null,
            'ini' => [],
            'handler' => [],
        ];

    //'timeout'が指定されていれば、Session継続時間を差し替える
        if ($config['timeout']) {
            $config['ini']['session.gc_maxlifetime'] = 60 * $config['timeout'];
        }

「’timeout’が指定されていればそれをSession継続時間として指定する」というコードの模様。

コードを見た感じ、デフォルトでは「session.gc_maxlifetime」の値を参照するようですね。

さらに調べたところ、下記外部サイト様に記載がありました。

CakePHP3にてセッションタイムアウトの時間を変更する方法 - Qiita
はじめにCakePHP3にてセッションタイムアウト時間の変更方法についてまとめました環境CakePHP 3.5.17TL...

※以下、上の外部サイト様より抜粋です。

・config/app.phpのSessionにtimeoutを設定します

・設定しないと、php.iniの「gc_maxlifetime」の値となります

仮説は正しかったようです。

というわけで、php.iniのsession.gc_maxlifetimeを調べたところ、「1440」と指定されていました。

1440秒なので、私のサーバ環境ではデフォルトのSession保持時間は24分間でした。

やはり30分弱だったようですね。

ちなみに、Session.phpのパスはCakephp3系と4系で違う模様。

CakePHP4系:vendor/cakephp/cakephp/src/Http/Session.php

CakePHP3系:vendor/cakephp/cakephp/src/Network/Session.php

まとめ

①Session保持時間(ログイン状態維持時間)はconfig/app.phpで指定できる。

②デフォルトではphp.iniの「session.gc_maxlifetime」の値を参照する。

参考

・CakePHP公式:Sessions

・Qiita:CakePHP3にてセッションタイムアウトの時間を変更する方法

コメント

タイトルとURLをコピーしました