SessionTimeoutFilter.php
2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/*
* (EP20201022)
*
* Pour pouvoir mettre à jour les stats de connexion
* au moment d'un timeout automatique (qui fait un logout auto sans appeler Users.logout())
*
* https://stackoverflow.com/questions/32298817/how-to-prevent-cakephp-3-0-from-extending-session-timeout-with-ajax-requests
*
*/
namespace App\Routing\Filter;
use Cake\Core\Configure;
use Cake\Event\Event;
use Cake\Routing\DispatcherFilter;
use App\Controller\UsersController;
class SessionTimeoutFilter extends DispatcherFilter
{
public function beforeDispatch(Event $event) {
//debug("iciii1");
// Si déjà TIMEOUT => on ne peut plus rien faire, donc on quitte
//debug($_SESSION);
$request = $event->data['request'];
$session = $request->session();
$session_user = $session->read('Auth.User');
if (! $session_user) return;
// MARCHE PAS, WHY ???????
//if (! isset($_SESSION['Auth']['User']) ) return;
//debug("iciii2");
// Sinon, on met à jour les stats de connexion
(new UsersController())->statsUpdateForCurrentUserWhen($session_user, 'durant la session');
//(new UsersController())->statsUpdateForCurrentUserDuringSession($session_user);
//(new UsersController())->updateStatsForCurrentUserDuringSession();
//exit;
/*
//debug($event->data['request']);
//debug($event);
/S @var $request \Cake\Network\Request S/
$request = $event->data['request'];
$session = $request->session();
$lastAccess = $session->read('SessionTimeoutFilter.lastAccess'); // en sec
//debug($lastAccess);
if ($lastAccess !== null) {
// On calcule le temps d'inactivité de l'utilisateur
$inactivity_duration = time() - $lastAccess;
//debug($inactivity_duration);
//debug(Configure::read('Session.timeout')*60);
//debug("avant");
/S
$sess = $_SESSION['Auth']['User'];
$user_fullname = $sess['sn'][0].' '.$sess['givenname'][0];
//debug($user_fullname);
S/
//debug("after");
// Si ce temps d'inactivité est supérieur au timeout, on détruit la session,
if ($inactivity_duration > Configure::read('Session.timeout') * 60) {
// Sans doute inutile vu que logout() l'a déjà fait normalement...
$request->session()->destroy();
}
}
// On écrit l'heure actuelle dans la variable de session lastAccess
if (! $request->is('ajax') )
$session->write('SessionTimeoutFilter.lastAccess', time()); // en sec
*/
}
}