Knopf war unlesbar, und der Code wird jetzt bei jedem Schliessen neu verlangt

Zwei Rueckmeldungen vom 22.08.2026, beide behoben und mit Tests abgesichert.

1) "das sieht nicht gut aus" (Bildschirmfoto des Hauptknopfs)
   Ursache: ".wd a" ist Klasse+Element und damit spezifischer als die reine
   Knopfklasse ".wd-btn--haupt". Die Textfarbe des Knopfs wurde dadurch
   ueberstimmt -- hellblaue Schrift auf hellblauem Grund, praktisch
   unlesbar. Derselbe Spezifitaetsfehler wie zuvor bei den Namen auf der
   Zugangswand. Fix: ".wd a:not(.wd-btn)" plus zweistufig geschriebene
   Knopfregeln, damit das nicht wieder passieren kann.

2) "das sieht lang gezogen aus"
   Die Pillenform (border-radius 999px) laesst breite Knoepfe
   auseinandergezogen wirken, weil der Radius optisch mit der Breite
   mitwaechst. Jetzt fester Radius von 14px -- gleiche Form bei jeder
   Breite, ruhiger und hochwertiger.

3) "ich will das ich jedes mal den code gefragt werde wenn man die seite
   zu macht"
   Das Sitzungs-Cookie allein reicht dafuer nicht: Browser stellen genau
   solche Cookies beim Wiederherstellen von Tabs zurueck ("Dort
   fortfahren, wo du aufgehoert hast"), man landet dann ohne Codeabfrage
   wieder mitten in der Seite. Zusaetzlich jetzt eine Sitzungsmarke im
   sessionStorage, die beim echten Schliessen verschwindet. Fehlt sie bei
   vorhandenem Cookie, wird die Sitzung serverseitig beendet und zur
   Zugangswand geleitet. Token-Notbremse von 24 auf 8 Stunden gesenkt.
   13/13 Tests im echten Browser, inklusive Schutz vor Endlosschleife.

DEPLOY.md: zwei Checkouts auf dem Server dokumentiert (/home/dogiweb und
/home/dogiintern) und der Vorfall, dass /webdesign nach dem Pull kurz ohne
Zugangsschutz erreichbar war, weil der Dienstneustart fehlte.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-22 18:20:34 +02:00
co-authored by Claude Opus 5
parent 4b3ec450d5
commit 356bb974b8
6 changed files with 304 additions and 18 deletions
+61 -1
View File
@@ -761,10 +761,70 @@
}
/* ===================================================================
8. START
8. ZUGANG BEIM SCHLIESSEN DER SEITE BEENDEN
Wunsch vom 22.08.2026: "ich will das ich jedes mal den code gefragt
werde wenn man die seite zu macht."
Warum das Sitzungs-Cookie allein dafür NICHT reicht:
Ein Cookie ohne Ablaufdatum wirft der Browser beim Schließen zwar weg
— aber "Tabs wiederherstellen" (Chrome: "Dort fortfahren, wo du
aufgehört hast", Android beim erneuten Öffnen, iOS beim Zurückholen
einer App aus dem Speicher) stellt genau diese Cookies wieder her.
Man landet dann ohne Codeabfrage wieder mitten in der Seite.
Deshalb zusätzlich eine Kennung im sessionStorage. Der ist an die
Browser-Sitzung des Tabs gebunden und ist beim echten Schließen weg.
Fehlt die Kennung, obwohl ein Cookie da ist, war die Seite zu →
Sitzung serverseitig beenden und zurück zur Zugangswand.
Ehrliche Einschränkung: Wer die Adresse in einem NEUEN Tab von Hand
eingibt, hat dort ebenfalls einen leeren sessionStorage und wird
erneut gefragt. Das ist der Preis dafür, dass es beim Schließen
zuverlässig greift — und entspricht dem, was gewünscht war.
=================================================================== */
var SITZUNGS_MARKE = "wd-sitzung-aktiv";
function sitzungsMarkeSetzen() {
try { sessionStorage.setItem(SITZUNGS_MARKE, "1"); } catch (e) { /* egal */ }
}
function hatRollenCookie() {
return document.cookie.split(";").some(function (s) {
return s.trim().indexOf("dogiwd_rolle=") === 0;
});
}
function zugangPruefen() {
// Auf der Zugangswand selbst gibt es nichts zu beenden.
if (location.pathname.indexOf("/webdesign/zugang.html") === 0) return;
var marke = null;
try { marke = sessionStorage.getItem(SITZUNGS_MARKE); } catch (e) { return; }
if (marke) return; // laufende Sitzung, alles gut
/* Kein Rollen-Cookie -> es gab hier noch nie eine Anmeldung in diesem
Browser (oder der Bereich ist freigegeben). Dann NICHT abmelden:
sonst würde eine gerade erst begonnene Sitzung sofort beendet. */
if (!hatRollenCookie()) { sitzungsMarkeSetzen(); return; }
/* Cookie da, Marke weg -> die Seite war zwischendurch zu. */
fetch("/webdesign/zugang-beenden", { method: "POST" })
.catch(function () { /* auch ohne Antwort weiterleiten */ })
.then(function () {
location.replace(
"/webdesign/zugang.html?next=" + encodeURIComponent(location.pathname + location.search)
);
});
}
/* ===================================================================
9. START
=================================================================== */
function start() {
document.body.classList.add("wd");
zugangPruefen();
sitzungsMarkeSetzen();
uebersetzeSeite();
zeichneKopf();
zeichneFuss();