session cookie handling
romy
- php
Hey,
also irgendwie hab ich was grundlegendes wahrscheinlich noch nicht verstanden.
1. Irgendjemand sagt immer man solle die sessionvariablen in neueren Versionen direkt ins Sessionarray schreiben und nicht mehr session-register benutzen. Wie sage ich dann meiner Seite dass sie überhaupt an diese Variable denken soll? (bisher immer mit session_register)
2. Wenn ich mehrere Cookies hab mit sesioninfos, wie kann ich mal rauskriegen auf welchen er sich bezieht? Habe gerade dass Problem, dass unterschiedliche Seiten scheinbar unterschiedlichen Sessions angehören und weiss weder warum noch wieso. Das kann ich aber nur mal rauskriegen, wenn ich überhaupt mal sehe wo er was hinschreibt und welche sessioncookies es gibt.
session_get_cookie_params(); ist irgendwie nicht das Richtige.
3. Noch mal zu [pref:t=33220&m=180655]
was ist mit dem zweiten Parameter? Es soll doch ein array sein oder? Es ist aber ein array. Muss dass irgendiwe anders definiert werden
danke für jede Hilfe
bin ganz schön mit den Nerven runter, immer geht alles nur nicht, es kann doch einfach mal was funktionieren, naja, wahrscheinlich nicht der beste Tag heute! :(
romy
- Irgendjemand sagt immer man solle die sessionvariablen in neueren Versionen direkt ins Sessionarray schreiben und nicht mehr session-register benutzen. Wie sage ich dann meiner Seite dass sie überhaupt an diese Variable denken soll? (bisher immer mit session_register)
Mit einem Aufruf von session_start() wird $_SESSION[] wiederhergestellt. Ist session.auto_start in der Konfiguration aktiviert, übernimmt PHP das sogar automatisch.
Das Problem mit session_register() ist (soweit ich das überblicke, ich benutze immer session_start() und $_SESSION[]), daß es in gewissem Sinne mehr auf "normale" Variablen abzielt (also zum Beispiel $test statt $_SESSION["test"]).
Nun ist in neueren PHP-Versionen eine Einstellung namens register_globals nicht mehr standardmäßig eingeschaltet, weil sie ein kleines Sicherheitsloch darstellt. Mit ausgeschaltetem register_globals kann man aber session_register() nur noch mit Einträgen in $_SESSION[] benutzen, so daß man im Prinzip auch gleich einen einzigen Aufruf von session_start() nehmen kann, anstatt jede Variable einzeln zu registrieren.
- Wenn ich mehrere Cookies hab mit sesioninfos, wie kann ich mal rauskriegen auf welchen er sich bezieht?
Ein Benutzer kann innerhalb einer Domain immer nur in einer Session sitzen, etwas anderes ist technisch nicht möglich. Ausnahme: Du hast den Cookie-Pfad explizit verändert. Sowas ist aber nicht ratsam.
Habe gerade dass Problem, dass unterschiedliche Seiten scheinbar unterschiedlichen Sessions angehören und weiss weder warum noch wieso.
Wie meinst Du das? Hast Du vielleicht einfach nur vergessen, am Ende der Sitzung session_destroy() aufzurufen?
Das kann ich aber nur mal rauskriegen, wenn ich überhaupt mal sehe wo er was hinschreibt und welche sessioncookies es gibt.
Cookies findest Du bei Netscape/Mozilla in einer Datei namens cookies.txt, beim IE in einem Verzeichnis namens Cookies. Dort steht allerdings nur eine Nummer drin, die eigentlichen Daten werden (zusammen mit dieser Nummer als Referenz) auf dem Server gespeichert, den Pfad findest Du in der php.ini (sofern Du darauf Zugriff hast).
- Noch mal zu [pref:t=33220&m=180655]
was ist mit dem zweiten Parameter? Es soll doch ein array sein oder? Es ist aber ein array. Muss dass irgendiwe anders definiert werden
Das sieht eigentlich korrekt aus. Was sagt var_dump($datei_inc); _direkt_ vor array_search()? Stehen noch Zeilen zwischen der Initialisierung und array_search()?
Gruß,
soenk.e
Hi Soenk.e, ;)
- Noch mal zu [pref:t=33220&m=180655]
was ist mit dem zweiten Parameter? Es soll doch ein array sein oder? Es ist aber ein array. Muss dass irgendiwe anders definiert werden
Das sieht eigentlich korrekt aus. Was sagt var_dump($datei_inc); _direkt_ vor array_search()? Stehen noch Zeilen zwischen der Initialisierung und array_search()?
Ja da standen noch Zeilen, ich hatte vergessen, das array mit in die Funktion zu übernehmen in der ich das array_search hatte ;)
Danke ihr beiden für die Erklärungen ich glaube jetzt habe ich es verstanden.
Wünsch Euch beiden einen guten Rutsch
ciao
romy
Hallo Romy,
PHP ist ja eine Interpretersprache und hat damit ein "Runtime-System" laufen. Dieses kümmert sich automatisch um diverse Dinge. Spätestestens durch den Scriptaufruf wird eine Instanz des Systems gestartet.
Beim Aufruf von session_start() sucht das System nach einem "Session-Cookie". Der Name des Cookies ist in der PHP-ini festgelegt (session.name). Man kann den Namen VOR dem Aufruf von session_start() durch session_name() explizit setzen. Ich tu das grundsätzlich und hole mir den Namen aus einer selbstdefinierten Konstanten, die in einer const.inc.php steht...
Wenn man eine (alte) Session zwangsweise wiederaufnehmen will (der Client wußte noch nichts von der Nummer), dann muss man einfach in das $_COOKIE-Array die Sessionnummer unter dem besagten Sessionnamen VOR Aufruf von session_start() hineinschreiben. Das (erneute) Setzen des Cookies auf dem Client muss man dann allerdings auch "zu Fuß" machen mit set_cookie().
Anderenfalls wird durch session_start() versucht, den passenden Cookie vom Client zu finden und den Startvorgang einzuleiten. Wenn kein Cookie vorhanden ist, dann würfelt PHP einen aus, legt eine passende Sessiondatei an und trägt den Cookie in den Header der Seite ein. Der wird dann an den Client geschickt.
Die Script-Shutdown-Funktion wird von session_start() automatisch eingetragen. Sie ist für das Sichern der Variablen am Scriptende verantwortlich. Sie sichert entweder die mit session_regsister() angemeldeten, oder die $HTTP_SESSION_VARS oder die $_SESSION. Es bleibt nur einer der drei Variablenbereiche erhalten. Die Priorität habe ich noch nicht getestet. Zur Zeit benutze ich immer noch $HTTP_SESSION_VARS, weil das bei den meisten Versionen noch klappt.
Grüße
Tom