Session-Timeout nach 5min.
Dieser Commit ist enthalten in:
116
JOURNAL.md
116
JOURNAL.md
@@ -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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren