app.phpの設定だけでは実現できません。
CakePHPのセッションには、 Config.time
というリクエストの度に更新される現在時刻の値があります。
これを利用し、app.phpではタイムアウトの設定は長いほうに合わせておき、アプリケーションの早い段階(Middleware等)でログイン状態に合わせ、セッションに記録されている Config.time
の値をチェックしてタイムアウト判定し、タイムアウト時にはセッションを破棄して再作成すれば良いでしょう。
データベースにセッションを保存しているということで、SessionsTableでのexpires書き換えをするのであれば
php
1// SessionsTable.php
2class SessionsTable extends Table
3{
4 public function beforeSave(Event $event, EntityInterface $entity)
5 {
6 $this->dispatchEvent('Sessions.beforeSave', compact('entity'));
7 }
8}
9
10// SomeMiddleware.php
11class SomeMiddleware implements MiddlewareInterface
12{
13 public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
14 {
15 EventManager::instance()->on('Sessions.beforeSave', static function (Event $event, $entity) use ($request) {
16 // セッションのAuth.roleで権限を判別できる想定
17 if ($request->getSession()->read('Auth.role') === 'admin') {
18 $entity->expires = time() + 600;
19 }
20 });
21
22 return $next($request, $response)
23 }
24}
25
このような形でしょうか
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/17 08:38 編集
2020/04/17 10:17
2020/04/17 10:23 編集
2020/04/20 05:34