Sven Rautenberg: sessions

Beitrag lesen

Moin!

ich habe ein problem und weiß keinen so rechten lösungsansatz.

Und ich verstehe dein Problem nicht. Kannst du das nochmal genauer beschreiben?

Aber ich kommentiere erstmal dein Vorgehen:

ich habe eine anmeldemaske

Ein HTML-Formular?

in der ich benutzer und passwort eintrage und diese in der datenbank vergleiche. wenn die daten zutreffend sind, dann starte ich eine session

Warum erst jetzt. Starte grundsätzlich eine Session. Wenn der Benutzer sich einloggt, dann speichere diese Information im Session-Array, indem du z.B. Benutzer und Passwort speicherst, oder die aus der Datenbank ermittelten Rechte ins Session-Array schreibst.

und schreibe mit der funktion session_id() die sid in eine variable.

Wozu das? PHP verwaltet die Session-ID prima von ganz alleine. Und das Session-Array $_SESSION wird auch automatisch wieder neu geladen und mit den bisher darin gespeicherten Werten belegt, wenn auf einer neuen PHP-Seite wieder session_start() aufgerufen wird - vollautomatisch für die richtige Session-ID.

danach includiere ich eine weitere php datei und vergleiche die sid in der variablen mit der funktion session_id().

Wozu?

dies geht in diesem falle gut, da sich ja durch das include das zweite script eigentlich im ersten befindet. nun gebe ich in dem script die sid mit einem link (also get) an ein anderes (nicht includiertes) script weiter und dort möchte ich die sid, die ich mit der url mitgegeben habe, mit der sid vom server vergleichen, doch wenn ich die funktion session_id() benutze ist keine sid vorhanden.

Was bedeutet bei dir "sid". Es gibt eine vordefinierte Konstante SID (Großbuchstaben!), welche einen Textstring der Form "sessionname=sessionid" enthält, wenn PHP festgestellt hat, dass der Browser kein Cookie mit diesen Daten gesendet hat.

Startest du die Session auf jeder Folgeseite erneut?

die sid muss doch auf dem server vorhanden sein! wie komme ich an die sid ran?

Wie gesagt: Die Session verwaltet PHP von ganz alleine. Du benötigst zwingend nur auf jeder Seite den Aufruf von session_start(), und alle Session-Werte speicherst du im Array $_SESSION (also beispielsweise so: $_SESSION['user'] = $_POST['benutzername'], wenn ein POST-Formular mit dem Formularfeld "benutzername" ankommt - der Session-Arraybezeichner und der Variablenname müssen nicht identisch sein).

Manche aufwendigeren Konstruktionen erfordern dann (aber selten) den Aufruf von session_id(), session_name() oder sonstigen Session-Funktionen. Ganz unterlassen solltest du unbedingt den Aufruf von session_register(), um eine Variable zur Session-Variablen zu machen. Benutze ausschließlich den Zugriff auf $_SESSION, alles andere ergibt Müll und Konfusion.

- Sven Rautenberg

--
"Love your nation - respect the others."