Upload via GUI (275 Dateien)
This commit is contained in:
@@ -90,15 +90,27 @@ function require_staff_login(): array
|
||||
// Inaktivitäts-Timeout
|
||||
$timeout = (int)(get_setting('staff_session_timeout', '30') ?: 30); // Minuten
|
||||
$last = $_SESSION['staff_last_activity'] ?? 0;
|
||||
$userNavigation = staff_is_user_navigation();
|
||||
if ($last && (time() - $last) > ($timeout * 60)) {
|
||||
staff_logout();
|
||||
session_start();
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
if (!$userNavigation) {
|
||||
// Hintergrund-Abruf (Aktualisierung der Liste, Chat-Abfrage …): kurze Antwort statt Weiterleitung auf die Anmeldeseite
|
||||
http_response_code(401);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode(['error' => 'Session abgelaufen', 'sessionExpired' => true]);
|
||||
exit;
|
||||
}
|
||||
$_SESSION['flash'] = [['type'=>'error','message'=>'Sie wurden wegen Inaktivität abgemeldet.']];
|
||||
redirect('/staff/login.php');
|
||||
}
|
||||
$_SESSION['staff_last_activity'] = time();
|
||||
// Echte Seitenaufrufe zählen als Aktivität (Hintergrund-Abrufe per fetch nicht)
|
||||
if (staff_is_user_navigation()) staff_touch_activity(get_db(), (int) $staff['id']);
|
||||
// Nur echte Bedienung hält die Sitzung am Leben: ein vom Nutzer ausgelöster Seitenaufruf oder der Ping der Seite bei Klicks und
|
||||
// Tastatureingaben (staff/session_ping.php). Hintergrund-Abfragen der offenen Seiten (Listen, Chat, Anwesenheit alle paar
|
||||
// Sekunden) zählen nicht, sonst würde eine offene Seite die Sitzung ewig verlängern und die Abmeldung nie greifen.
|
||||
if ($userNavigation) {
|
||||
$_SESSION['staff_last_activity'] = time();
|
||||
staff_touch_activity(get_db(), (int) $staff['id']);
|
||||
}
|
||||
|
||||
// "Eingebauter" Ersatz für echte Server-Cronjobs (siehe includes/pseudo_cron.php):
|
||||
// bei jeder authentifizierten Backend-Anfrage werden fällige Jobs im Hintergrund geprüft.
|
||||
|
||||
Reference in New Issue
Block a user