umbau 1.0
This commit is contained in:
37
static/js/session-keepalive.js
Normal file
37
static/js/session-keepalive.js
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* E9 (Umsetzungsauftrag Teil E): der gleitende Idle-Timeout des Session-
|
||||
* Cookies (siehe app/auth/deps.py::get_current_user, refresh_session_token)
|
||||
* wird nur bei regulaeren HTTP-Anfragen verlaengert. Ein WebSocket-Handshake
|
||||
* kann das nicht (WebSockets erlauben nach dem Handshake kein Set-Cookie
|
||||
* mehr, siehe get_current_user_ws()) -- ein Benutzer, der eine Stunde
|
||||
* ausschliesslich in einem offenen Terminal- oder RDP-Tab arbeitet, haette
|
||||
* sonst ein abgelaufenes Cookie: die laufende Sitzung selbst laeuft zwar
|
||||
* weiter, aber jede WEITERE Aktion (zweite Sitzung oeffnen, Dateitransfer,
|
||||
* Katalog neu laden) scheitert mit "Session abgelaufen".
|
||||
*
|
||||
* Fix: waehrend ein Sitzungstab (Terminal/RDP) offen ist, periodisch einen
|
||||
* billigen, bereits authentifizierten HTTP-Endpunkt aufrufen (GET /auth/me,
|
||||
* siehe app/auth/routes.py) -- das durchlaeuft dieselbe get_current_user()-
|
||||
* Dependency wie jede andere Anfrage und verlaengert den Cookie ganz
|
||||
* regulaer, ohne einen eigenen Endpunkt oder Serveraenderungen zu brauchen.
|
||||
*
|
||||
* Intervall: deutlich unter dem serverseitig konfigurierten
|
||||
* session_idle_timeout_s (Standard 900s/15min, app/config.py) -- 3 Minuten
|
||||
* Sicherheitsmarge reichen fuer jede sinnvolle Konfiguration.
|
||||
*/
|
||||
(() => {
|
||||
"use strict";
|
||||
|
||||
const KEEPALIVE_INTERVAL_MS = 3 * 60 * 1000;
|
||||
|
||||
function ping() {
|
||||
fetch("/auth/me", { method: "GET", credentials: "same-origin" }).catch(() => {
|
||||
// Absichtlich stumm: ein einzelner fehlgeschlagener Keepalive-Ping
|
||||
// (z.B. kurzer Netzwerkaussetzer) soll die laufende Sitzung nicht
|
||||
// stoeren -- schlaegt die Session tatsaechlich fehl, faellt das beim
|
||||
// naechsten regulaeren Request (Dateitransfer, Reload, ...) ohnehin auf.
|
||||
});
|
||||
}
|
||||
|
||||
window.setInterval(ping, KEEPALIVE_INTERVAL_MS);
|
||||
})();
|
||||
Reference in New Issue
Block a user