JWT vs Session: Welche Authentifizierung Wählen

Melden Sie einen Nutzer in einer session-basierten App ab, vergisst der Server ihn bei der nächsten Anfrage. Melden Sie ihn in einer JWT-basierten App ab, bleibt das Token, das er besitzt, gültig, bis es abläuft – es sei denn, Sie haben einen zusätzlichen Mechanismus dafür gebaut. Dieser Unterschied ist die eigentliche Entscheidung hinter „JWT vs. Session". Der Rest folgt daraus. Was eine Session tatsächlich speichert Eine Session hält den Zustand des Nutzers auf dem Server und gibt dem Browser nur einen Schlüssel zum Nachschlagen. ...

16. Oktober 2026 · 7 Minuten · 1435 Wörter · SpaghettiCoder

LocalStorage, SessionStorage oder Cookies: Was wofür

Ein Login-Endpunkt liefert ein JWT zurück, und Sie haben drei Orte, um es abzulegen: ein Cookie, localStorage oder sessionStorage. Wählen Sie den falschen, und entweder trägt ein XSS-Bug das Token davon, oder das Token erreicht Ihre API nie. Alle drei speichern Strings im Browser. Sie unterscheiden sich darin, wer sie lesen kann, wie lange sie bestehen und ob der Server sie überhaupt zu sehen bekommt. Worin sich localStorage, sessionStorage und Cookies unterscheiden localStorage und sessionStorage sind dieselbe API, das Storage-Interface: setItem, getItem, removeItem, clear, String-Keys und String-Werte. Der Unterschied liegt in der Lebensdauer. localStorage überlebt das Schließen des Browsers und einen Neustart der Maschine und bleibt bestehen, bis etwas es löscht. Safari ist die Ausnahme: Mit aktivierter Tracking-Prevention löscht es skriptgeschriebenen Speicher für eine Seite, mit der der Nutzer seit sieben Tagen nicht interagiert hat. sessionStorage gehört einem einzelnen Tab und stirbt, wenn dieser Tab geschlossen wird. Geben Sie dieselbe URL in einem zweiten Tab ein, bekommen Sie ein frisches, leeres sessionStorage; nur “Tab duplizieren” kopiert den Inhalt mit. ...

5. Oktober 2026 · 7 Minuten · 1396 Wörter · SpaghettiCoder

Was ist CORS und wie behebt man CORS-Fehler

Ihr Frontend läuft auf http://localhost:5173, Ihre API auf http://localhost:4000, und der fetch-Aufruf, der in Postman anstandslos funktionierte, schlägt im Browser mit einer Wand aus rotem Text fehl: Access to fetch at 'http://localhost:4000/api/users' from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Ihr Server hat die Anfrage womöglich verarbeitet und eine 200 zurückgegeben. Der Browser hat sich einfach geweigert, die Antwort an Ihr JavaScript weiterzugeben. ...

26. September 2026 · 8 Minuten · 1551 Wörter · SpaghettiCoder

SSH-Tunnel: Lokales, Remote- und Dynamisches Port-Forwarding

Wie erreichen Sie eine Datenbank, die nur auf localhost lauscht? Eine Postgres-Instanz auf einem entfernten Server ist absichtlich an 127.0.0.1 gebunden. Nichts im Netzwerk kann sie erreichen, nur Prozesse, die auf genau dieser Maschine laufen. Ihr Laptop ist nicht diese Maschine, also scheitert psql -h remote-server -p 5432, bevor es überhaupt zur Authentifizierung kommt. Den Port nach außen zu öffnen, hebt genau den Grund auf, aus dem er an Loopback gebunden wurde. ...

24. September 2026 · 7 Minuten · 1422 Wörter · SpaghettiCoder

Was ist TLS und wie funktioniert die HTTPS-Verschlüsselung

Was TLS bei einer HTTPS-Verbindung tatsächlich schützt Laden Sie eine Seite über reines http:// in einem Netz, das Sie nicht kontrollieren, an einem Flughafen oder über den Router eines Cafés, dann läuft alles, was Sie senden, als lesbarer Text mit. Der URL-Pfad, die Cookies, die Formularfelder, das Passwort in einem Login-POST: Jeder in diesem Netz mit einem Paket-Sniffer liest es im Vorbeigehen. TLS, Transport Layer Security, verhindert genau das. Es sitzt zwischen TCP und dem Anwendungsprotokoll, sodass die Verbindung bereits verschlüsselt und an eine verifizierte Server-Identität gebunden ist, wenn HTTP zu sprechen beginnt. HTTPS ist HTTP, das über diese Verbindung läuft statt über eine unverschlüsselte. ...

20. September 2026 · 10 Minuten · 1956 Wörter · SpaghettiCoder

Umgebungsvariablen und Secrets in Docker

Wo die Umgebungsvariablen eines Containers landen Starten Sie einen Container mit -e DB_PASSWORD=hunter2 und prüfen Sie ihn mit docker inspect: 1 2 docker run -d --name api -e DB_PASSWORD=hunter2 nginx:alpine docker inspect --format '{{json .Config.Env}}' api 1 ["DB_PASSWORD=hunter2","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"] Das Passwort steht dort im Klartext, lesbar für jeden mit Zugriff auf den Docker-Socket, für docker exec api env und für jeden Prozess, der im Container läuft. Das ist kein Bug — genau dafür sind Umgebungsvariablen da. Das Problem ist, sie für Werte zu verwenden, die niemals so sichtbar sein sollten. ...

9. September 2026 · 6 Minuten · 1164 Wörter · SpaghettiCoder