dok/public/js/heartbeat.js
2026-04-08 16:41:47 +01:00

39 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ================================================
heartbeat.js Session am Leben halten &
beim Tab-Schließen ausloggen
Einbinden in launcher.ejs (oder deiner
Haupt-EJS-Datei) direkt vor </body>:
<script src="/js/heartbeat.js"></script>
================================================ */
(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");
});
})();