39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
/* ================================================
|
||
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");
|
||
});
|
||
})();
|