André Laugks: wie session ids erzeugen??

Beitrag lesen

Hallo!

Wenn Du session_register() verwendest, um eine Variable für die Sessiondatei zu registrieren, brauchst Du kein session_start() anzuwenden, das session_register() auch eine Session startet.

--> Ich gehe noch mal auf meine eigenen Sätze ein!

Es kann sein, das Du eine Session-ID brauchst, aber noch keine Variable in der Session-Datei registrieren möchtest. Dann verwendest Du session_start(). Du mußt immer wenn Du ein Script/Seite aufrufst, die Session neu starten, damit PHP weis was los ist, also Du das Sessionhadling verwenden möchtest. PHP weis in welcher Variable die session-ID gespeichert ist und kennt somit also auch die Datei.

Nehmen wir mal an, Du möchtest eine Session löschen, also sagen wir mal ein typischer Logout.

session_start(); // Starten, PHP kennt nun die ID
session_destroy(); // Session-ID "löschen"

Die Session-Datei bleibt meist noch im tmp-Verzeichnis liegen. Ist glaube ein Fehler von PHP. Am besten ist, man sorgt selbst fürs löschen. Also über ein Shellscript oder so, was aber Adminsache ist, oder man unrgistriert alle Variabeln und beendet dann die Session <- ist jetzt ein Gedanke von mir, falls man sensible Daten mitschleppt. Kann auch sein, das PHP mit session_destroy() alles in der Session-Datei löscht. Müßte man einfach mal austesten...

Wichtig ist nur, ganz zum Anfang der Seite. Sie mein Link von gestern. Natürlich darf vorher noch was anderes passieren, nur halt nichts, was abläuft wenn schon alle Header gesendet wurden, aber das stehe besser erklärt unter dem Link von gestern.

--> Ich gehe noch mal auf meine eigenen Sätze ein!

Siehe meinem letzten Posting an Marc. Ich bin kein HTTP-Experte. Frag mich nicht, was da genau alles gesendet wird an Headern. Ich habe hier ein Buch, wo sowas drin steht, aber da müßte ich auch mal rein schauen :-).

Mir war z.b. unklar, wie nun die Variblen konkret gemanagt werden. Es gibt also immer nur eine SessionID die man mit session_id() abfragen kann. Mit session_name() erhält man den Namen der Sessionvariablen, beispielsweise PHPSESSID, ASPSESSION, ...

Die Session-ID wird glaube aus einer md5()-Verschlüßlung, IP und Uhrzeit ermittelt oder so, auf alle Fälle eindeutig.
Der Session-Name(Variable) ist ja in der php.ini als Standard mit PHPSESSID angegeben. Den kannst Du in der php.ini ändern oder über session_name() einvergeben.

session_name("meinesession"); // vor dem Start der Session angeben
session_start();

Das ganze wird dann entweder (mit Zeitstempel!!) als Cookie am Client abgelegt oder im Filesystem des Servers als temporäre Datei

Nun sendet PHP ein Cookie zum Browser mit der Session-ID. Somit ist nun die Session-ID auf jeder der Seiten der Domain bekannt. Für alle Fälle, schleppst Du die Session-ID und Session-Name per GET mit, falls SID nicht funktioniert.

Der Cookie enthält den Session-Name und Session-ID, IMHO heißt der Cookie sogar so. Die Session-Datei wird auf alle Fälle im Filesystem abgelegt. PHP schaut eben, gibt es einen Cookie, wenn ja hat PHP die ID + Name und kann sie verwenden weis also welche die richtige Datei ist, ansonsten setze ein Cookie mit der Session-ID wenn der User z.B. auf die seite kommt.
Die Lebensdauer des Cookies ist i.d.R. auf 0 gesetzt, das heißt das der Cookie lebt so lange, bis der Browser geschlossen wird. Der Cookie wird hierbei nicht in die cookie.txt(NN) oder Cookieordner(IE) geschrieben/gelegt. Der Cookie liegt im Arbeitsspeicher. Schraubst Du die Lebensdauer hoch, kannst Du den Cookie "sehen", also er wird abgelegt.
Die Lebensdauer der Session-Datei ist was anderes. Das hängt davon ab, wie lange sie nicht verwendet wurd, PHP erklärt sie dann für gültig oder ungültig.

Mit session_register() kann man infolgedessen einzelne Variablen erzeugen, also name-value-pairs, die in den Cookies bzw. files abgelegt und ebenso aufgerufen werden können. Diese hat Andre mit einem 's_' gekennzeichnet.

Das "s_"verwende ich für mich, um die Variablen besser auseinander zu halten.

Wird wenn Cookies deaktiviert sind automatisch PHPSESSID=sdkhjoiudf0987df7sdfdsf7 an die URL drangehängt? Oder muss man das händisch machen?

Sie das letzte Posting an Marc.

Ich habe am Server das Senden von Session-Cookies unterbunden und auch das parsen der Seite unterbunden. Ich nehme alles über GET oder auch POST mit.

es wird also nicht jede s_ Variable einzeln angehängt. Denk dir einfach falls deine session_id() z.b. sdf78saf876safa876df567as4dds3 lautet, dass ein File am Server diesen Namen bekommt, und folgenden inhalt hat:

s_bname<delimiter>otto
s_passw<delimiter>gad34qht

Nicht ganz, die sieht ungefähr so aus:
$s_vorname = "André";
$s_nachname = "Laugks";
-------------------------------><8----------------------------------
s_titel|s:0:"";s_vorname|s:6:"André";s_vorname2|s:0:"";s_nachname_titel|s:0:"";s_nachname|s:9:"Laugks";s_nachname2|s:0:"";s_kuenstlername|s:0:""; -------------------------------><8----------------------------------

War mein Gedankenexperiment richtig??

Ich denke und hoffe Dir auch kein Mißt erzählt zu haben.

Tja, ich kann marc verstehen, dass er da nicht so ganz den durchblick hatte, denn wenn man noch nie was von SessionIDs oder Cookies gehört hat, dann kommt man bei dieser Ansammlung von Funktionen die sich alle irgendwie gleich anhören, und alle irgendwie das gleich zu tun scheinen, schon leicht ins grübeln. Daher danke für deine Erklärung :o)

stimmt, kann ich mir jetzt irgendwie konkreter vorstellen als noch vor einer Stunde :)

:-)

Wenn ich ehrlich bin, ich finde die Session-Tutorials die es so gibt, auch nicht besonders. Geschrieben von irgendwelchen PHP-Gurus und alle nehmen das selbe Beispiel.

Ich hatte als ich mit Sessions angefangen habe, ein ziemlich großen Problem. Ich konnte Werte/Strings, die ich einmal in einer Session-Variable abgelegt hatte, nicht mehr ändern. Ich wurde immer in den Newsgroups auf eine FAQ verwiesen, was das behandelt hat, was ich schon lange wußte, aber nichts mit meinem Problem zu tun hatte. Dann hat in meiner alten Agentur ein PHP-Freak angefangen, der mir auch keine Lösung nennen konnte und das Problem als sehr eigenartig bezeichnete. Naja, auch keine Hilfe bekommen, zum Glück bin ich dann auf ein Workaround gekommen.
Da ich aber selbst so ein Tutorial noch nicht geschrieben habe..., keine Ahnung ob ich es besser gemacht hätte?! Wenn man etwas verstanden hat, ist immer alles sehr einfach. Meist ist es sehr einfach, aber irgendwie hat man ein Brett vor dem Kopf.

PS:
Ich glaube, ich bin schon was ruhiger geworden, wenn ein Newbie eine Frage stellt, die gegen den guten Geschmack verstößt, eventuell User verschreckt oder wie auch immer.
Genau die selben Fehler hat man auch gemacht und "dumme" technische Fragen gestellt. Was interessiert mich eine private Seite, wo ein NervPopup aufgeht, eine 10 MB Flashani abläuft oder man drum gebetten wird ins Gästebuch zu schreiben! Ich habe selbst die Wahl, die Seite zu verlassen. Der Frager wird schon selbst lernen, das der User davon nicht begeistert ist. Ein Kind fässt auch nicht mehr den herd an, wen es sich dort ordentlich mal die Finger verbrannt hat. ...Obwohl ich mir geile Flashanis gerne anschaue.

So, jetzt ist das Bier leer und ich hoffe nicht zu viele Rechtschreibfehler..., ich werde mir mit Sicherheit nicht noch einmal alles durch lesen. :-)

MfG, André Laugks