Session-Timeout nach 5min.

Dieser Commit ist enthalten in:
2025-06-07 22:19:45 +02:00
Ursprung df5e0e0365
Commit 65fe0d4bf5
15 geänderte Dateien mit 508 neuen und 249 gelöschten Zeilen

Datei anzeigen

@@ -687,4 +687,118 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
**Hinweis für Produktion:**
- CAPTCHA-Keys müssen in .env konfiguriert werden
- E-Mail-Server für Benachrichtigungen einrichten
- Rate-Limits können über Konstanten angepasst werden
- Rate-Limits können über Konstanten angepasst werden
### 2025-06-07 - Session-Timeout mit Live-Timer implementiert
- 5 Minuten Inaktivitäts-Timeout mit visueller Countdown-Anzeige
- Automatische Session-Verlängerung bei Benutzeraktivität
**Implementierte Features:**
1. **Session-Timeout Backend:**
- Flask Session-Timeout auf 5 Minuten konfiguriert
- Heartbeat-Endpoint für Keep-Alive
- Automatisches Session-Update bei jeder Aktion
2. **Live-Timer in der Navbar:**
- Countdown von 5:00 bis 0:00
- Position: Zwischen Logo und Username
- Farbwechsel nach verbleibender Zeit:
- Grün: > 2 Minuten
- Gelb: 1-2 Minuten
- Rot: < 1 Minute
- Blinkend: < 30 Sekunden
3. **Benutzerinteraktion:**
- Timer wird bei jeder Aktivität zurückgesetzt
- Tracking von: Klicks, Tastatureingaben, Mausbewegungen
- Automatischer Heartbeat bei Aktivität
- Warnung bei < 1 Minute mit "Session verlängern" Button
4. **Base-Template System:**
- Neue base.html als Basis für alle Admin-Seiten
- Alle Templates (außer login.html) nutzen jetzt base.html
- Einheitliches Layout und Timer auf allen Seiten
**Neue/Geänderte Dateien:**
- v2_adminpanel/app.py (Session-Konfiguration, Heartbeat-Endpoint)
- v2_adminpanel/templates/base.html (neu - Base-Template mit Timer)
- Alle anderen Templates aktualisiert für Template-Vererbung
**Technische Details:**
- JavaScript-basierter Countdown-Timer
- AJAX-Heartbeat alle 5 Sekunden bei Aktivität
- LocalStorage für Tab-Synchronisation möglich
- Automatischer Logout bei 0:00
- Fetch-Interceptor für automatische Session-Verlängerung
**Sicherheitsverbesserung:**
- Automatischer Logout nach 5 Minuten Inaktivität
- Verhindert vergessene Sessions
- Visuelles Feedback für Session-Status
### 2025-06-07 - Session-Timeout Bug behoben
- Problem: Session-Timeout funktionierte nicht korrekt - Session blieb länger als 5 Minuten aktiv
- Ursache: login_required Decorator aktualisierte last_activity bei JEDEM Request
**Durchgeführte Änderungen:**
1. **login_required Decorator (app.py):**
- Prüft jetzt ob Session abgelaufen ist (5 Minuten seit last_activity)
- Aktualisiert last_activity NICHT mehr automatisch
- Führt AUTO_LOGOUT mit Audit-Log bei Timeout durch
- Speichert Username vor session.clear() für korrektes Logging
2. **Heartbeat-Endpoint (app.py):**
- Geändert zu POST-only Endpoint
- Aktualisiert explizit last_activity wenn aufgerufen
- Wird nur bei aktiver Benutzerinteraktion aufgerufen
3. **Frontend Timer (base.html):**
- Heartbeat wird als POST Request gesendet
- trackActivity() ruft extendSession() ohne vorheriges resetTimer() auf
- Timer wird erst nach erfolgreichem Heartbeat zurückgesetzt
- AJAX Interceptor ignoriert Heartbeat-Requests
4. **Audit-Log Erweiterung:**
- Neue Aktion AUTO_LOGOUT hinzugefügt
- Orange Farbcodierung (#fd7e14)
- Zeigt Grund des Timeouts im Audit-Log
**Ergebnis:**
- ✅ Session läuft nach exakt 5 Minuten Inaktivität ab
- ✅ Benutzeraktivität verlängert Session korrekt
- ✅ AUTO_LOGOUT wird im Audit-Log protokolliert
- ✅ Visueller Timer zeigt verbleibende Zeit
### 2025-06-07 - Session-Timeout weitere Verbesserungen
- Zusätzliche Fixes nach Test-Feedback implementiert
**Weitere durchgeführte Änderungen:**
1. **Fehlender Import behoben:**
- `flash` zu Flask-Imports hinzugefügt für Timeout-Warnmeldungen
2. **Session-Cookie-Konfiguration erweitert (app.py):**
- SESSION_COOKIE_HTTPONLY = True (Sicherheit gegen XSS)
- SESSION_COOKIE_SECURE = False (intern HTTP, extern HTTPS via Nginx)
- SESSION_COOKIE_SAMESITE = 'Lax' (CSRF-Schutz)
- SESSION_COOKIE_NAME = 'admin_session' (eindeutiger Name)
- SESSION_REFRESH_EACH_REQUEST = False (verhindert automatische Verlängerung)
3. **Session-Handling verbessert:**
- Entfernt: session.permanent = True aus login_required decorator
- Hinzugefügt: session.modified = True im Heartbeat für explizites Speichern
- Debug-Logging für Session-Timeout-Prüfung hinzugefügt
4. **Nginx-Konfiguration:**
- Bereits korrekt konfiguriert für Heartbeat-Weiterleitung
- Proxy-Headers für korrekte IP-Weitergabe
**Technische Details:**
- Flask-Session mit Filesystem-Backend nutzt jetzt korrekte Cookie-Einstellungen
- Session-Cookie wird nicht mehr automatisch bei jedem Request verlängert
- Explizite Session-Modifikation nur bei Heartbeat-Requests
- Debug-Logs zeigen Zeit seit letzter Aktivität für Troubleshooting
**Status:**
- ✅ Session-Timeout-Mechanismus vollständig implementiert
- ✅ Debug-Logging für Session-Überwachung aktiv
- ✅ Cookie-Sicherheitseinstellungen optimiert