/* ================================================ heartbeat.js – Session am Leben halten & beim Tab-Schließen ausloggen Einbinden in launcher.ejs (oder deiner Haupt-EJS-Datei) direkt vor : ================================================ */ (function () { /* ── Heartbeat alle 60 Sekunden ───────────────── Solange der Tab offen ist, wird die Session server-seitig durch session.touch() verlängert. Bleibt der Ping aus (Browser geschlossen), läuft die Session nach maxAge (24h) ab. ────────────────────────────────────────────── */ const HEARTBEAT_INTERVAL_MS = 60_000; // 60 Sekunden function sendHeartbeat() { navigator.sendBeacon("/api/heartbeat"); } // Sofort beim Laden einmal pingen sendHeartbeat(); // Danach regelmäßig setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS); /* ── Logout beim Tab-/Browser-Schließen ───────── sendBeacon ist zuverlässiger als fetch(), weil es auch beim Schließen noch abgesendet wird. Der Browser garantiert die Zustellung. ────────────────────────────────────────────── */ window.addEventListener("beforeunload", () => { navigator.sendBeacon("/api/logout"); }); })();