回答編集履歴

1

Config.timeは利用できないので回答を書き換え

2020/04/17 10:57

投稿

nojimage
nojimage

スコア959

test CHANGED
@@ -2,8 +2,72 @@
2
2
 
3
3
 
4
4
 
5
- CakePHPのセッションには、 `Config.time` というリクエストの度に更新される現在時刻の値があります。
5
+ ~~CakePHPのセッションには、 `Config.time` というリクエストの度に更新される現在時刻の値があります。~~
6
6
 
7
7
 
8
8
 
9
- これを利用し、app.phpではタイムアウトの設定は長いほうに合わせておき、アプリケーションの早い段階(Middleware等)でログイン状態に合わせ、セッションに記録されている `Config.time` の値をチェックしてタイムアウト判定し、タイムアウト時にはセッションを破棄して再作成すれば良いでしょう。
9
+ ~~これを利用し、app.phpではタイムアウトの設定は長いほうに合わせておき、アプリケーションの早い段階(Middleware等)でログイン状態に合わせ、セッションに記録されている `Config.time` の値をチェックしてタイムアウト判定し、タイムアウト時にはセッションを破棄して再作成すれば良いでしょう。~~
10
+
11
+
12
+
13
+ データベースにセッションを保存しているということで、SessionsTableでのexpires書き換えをするのであれば
14
+
15
+
16
+
17
+ ```php
18
+
19
+ // SessionsTable.php
20
+
21
+ class SessionsTable extends Table
22
+
23
+ {
24
+
25
+ public function beforeSave(Event $event, EntityInterface $entity)
26
+
27
+ {
28
+
29
+ $this->dispatchEvent('Sessions.beforeSave', compact('entity'));
30
+
31
+ }
32
+
33
+ }
34
+
35
+
36
+
37
+ // SomeMiddleware.php
38
+
39
+ class SomeMiddleware implements MiddlewareInterface
40
+
41
+ {
42
+
43
+ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
44
+
45
+ {
46
+
47
+ EventManager::instance()->on('Sessions.beforeSave', static function (Event $event, $entity) use ($request) {
48
+
49
+ // セッションのAuth.roleで権限を判別できる想定
50
+
51
+ if ($request->getSession()->read('Auth.role') === 'admin') {
52
+
53
+ $entity->expires = time() + 600;
54
+
55
+ }
56
+
57
+ });
58
+
59
+
60
+
61
+ return $next($request, $response)
62
+
63
+ }
64
+
65
+ }
66
+
67
+
68
+
69
+ ```
70
+
71
+
72
+
73
+ このような形でしょうか