概要
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」の値を参照するようですね。
さらに調べたところ、下記外部サイト様に記載がありました。
※以下、上の外部サイト様より抜粋です。
・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
コメント