hotti: Session ID geht verloren

Beitrag lesen

Hotte bitte etwas ausführlicher, komm gerade nicht wie ich das machen soll.
Hab bisher noch nie was mit Cookies gemacht.

hi pp,

in Sachen PHP kann ich Dir leider nicht viel helfen, scheinbar ists da auch so, dass Du die kleinsten Details beim Programmieren gar nicht unbedingt kennen musst, weil es dafür schon weitgehend fix- und fertige Klassen und Methoden gibt.

Trotzdem ist immer gut, gerade auch die kleinen Details zu kennen und deswegen schreib ich hier mal das Prinzip einer Session auf, die an sich erstmal unabhängig von jeder Programmiersprache ist.

Wir nehmen mal an, dass es eine Web-Anwendung nur für authentifizierte Benutzer gibt, wofür ein "Login" erforderlich ist. Die Anwendung läge bspw. auf https://example.com/x als solche URL vor. Weitere zur Anwendung gehörige Seiten seien y und z. Die Seiten x, y oder z kann jeder aufrufen, ohne Login jedoch, geht da nix. x,y, und z sind so programmiert, dass ohne eine gültige Session, die einen gültigen Login voraussetzt, keine Aktionen möglich sind.

Login

Hugo startet Montagmorgen seinen Browser und tippt https://example.com/x in die Adresszeile ein. Da keine Session vorliegt, erfolgt sogleich eine Umleitung auf das Loginformular. Dort muss Hugo seinen Benutzernamen und ein Passwort eingeben, die sogenannten Credentials. Hugo gibt die ein und klickt auf die Schaltfläche "Anmelden", die ein input type='submit' ist.

Die Credentials gehen per POST an den Server, dort wartet ein Script, was in <form action="login_script"> notiert ist. login_script vergleicht die Eingabe mit den Credentials, die auf dem Server hinterlegt sind. Das kann in einer DB, einer ActiveDirectory, in LDAP, auf einem RADIUS- oder TACACS+ Server oder in einer Datei sein.

Ist die Anmeldung nicht ok, kriegt Hugo ein großes Stopschild gezeigt. Ansonsten, im Falle ok, erzeugt login_script einen zufälligen Key, den sogenannten SessionKey, bspw. mit dem Wert 'f8572ff800ccf2c35309e59fe4477015'. Dieser SessionKey ist einmalig und wird (hoffentlich) nicht wieder vorkommen, er soll nämlich nur für diese eine Session gelten. login_script speichert den ebend erzeugten SessionKey in einer DB.

Cookie setzen und Redirektion

login_script sendet nun den Cookie und einen Redirection Header, das könnte so gehen:

print "Set-Cookie: waldemar=f8572ff800ccf2c35309e59fe4477015; path=/; expires=Thu, 19-Apr-2009 12:27:55 GMT\n";
print "Status: 302 Moved\n";
print "location: https://example.com/x\n\n";

Der Cookie hat also den Namen "waldemar" und den SessionKey als Wert sowie ein Verfallsdatum (SessionCookie gelten meist nur für eine Browsersitzung und haben i.d.R. kein 'expires' aus Sicherheitsgründen).

Hugos Browser nimmt den Cookie an und speichert den im Verzeichnis /FF/Cookies oder so. Der Browser wird dann auf die Anwendung https://example.com/x umgeleitet, die nunmehr offen ist mit Eingabefeldern für Daten, die Hugo eingeben möchte und auch darf, weil Hugo ist autentifiziert und auch autorisiert das zu tun.

Alles, was Hugo nun mit https://example.com/x, y oder z macht, läuft in einer sogenannten Session. Bei jedem Request an die Seiten x,y,z sendet der Browser den cookie mit, ohne dass das Hugo mitbekommt. Freilich sind die Seiten x,y,z nicht nur reines HTML, sondern ASP, JSP, CGI-Scripts in Perl oder PHP oder sonstige Anwendungen, die activ mit der DB reden können. x,y,z müssen nämlich bei jedem Request, also bei jeder Aktion, die Hugo macht, in den mitgeschickten Cookie gucken, den darin enthaltenen SessionKey auslesen und schauen, ob es diesen Key auch in der DB gibt. Solange das der Fall ist, ist die Session gültig.

Das ist das ganze Geheimnis einer Session mit Key und cookie, drumherum gibts sicher noch ein bischen mehr zu erzählen.

Finde Deinen Weg ;)
Hotte