Sven Rautenberg: Scope der Session Variable session_id()

Beitrag lesen

Moin!

Also so wie ich es verstanden habe, weiß die Funktion ob bereits eine Session ID erzeugt wurde und falls nicht erzeugzt sie eine neue.

Nein.

Die Funktion session_id() gibt dir die von session_start() generierte Session-ID zurück.

Wenn du _vor_ dem Aufruf von session_start() einen Parameter an session_id() übergibst, _setzt_ das die Session-ID, welche mit session_start() dann verwendet wird.

Mit anderen Worten:

session_id('einetolleID');
session_start();

verwendet als Session-ID "einetolleID", welches sich im Cookie sowie in der Konstanten SID bzw. den automatisch erzeugten URL-Parametern widerspiegeln müßte. Nachfolgende Aufrufe von session_id() geben ebenfalls den String "einetolleID" zurück.

Hingegen bringt die Abfolge
session_start();
$var = session_id();

eine automatisch generierte Session-ID in die Variable $var.

Jetzt habe ich eine Funktion geschrieben, die die user IP uusammen mit der session id in eine mysql DB einträgt.

Zu welchem Zweck, sei mal dahingestellt. Solltest du aber versuchen, bei weiteren Seitenabrufen zu prüfen, ob Session-ID und User-IP noch zusammenpassen, sei gewarnt: User-IPs können sich aus ganz legitimen Gründen auch während einer Session ändern! AOL-User benutzen zwangsweise eine Proxy-Farm, die mit unterschiedlichen IP-Adressen bei deinem Server Seiten abruft. Und wenn jemand bei seinem Provider alle 24 Stunden eine neue Verbindung aufbauen muß und dabei eine neue IP kriegt, und die Session dummerweise über diese 24-Stunden-Grenze reicht (zehn Minuten vorher angefangen, zehn Minuten später aufhören reicht ja schon), wechselt die IP auch.

Es kommt eine Fehlermeldung, daran habe ich durch zufall erkannt, dass bei jeder Aktualisierung der Seite mit der Fehlermeldung immmer eine andere Session id erzeugt wird.

Dann kennt dein Browser seine Session-ID nicht und teilt sie dem Server beim nächsten Seitenaufruf nicht mit. Es wird somit bei jedem Seitenaufruf eine neue Session gestartet (ach ja, das ist nämlich eine weitere Funktion von session_start(): Gucken, ob per Cookie, GET-Parameter oder POST-Formularfeld eine Session-ID übergeben wird, und sofern session_id() keine andere ID gesetzt hat, mit dieser Session-ID operieren).

Du hast also alle der folgenden Probleme:

1. Es wird kein Cookie gesendet, oder dein Browser akzeptiert es nicht.
2. Es wird keine Session-ID automatisch an alle Links angehängt und in alle Formulare geschrieben.
3. Es wird auch nicht manuell die Konstante SID an die Links und das Ergebnis von session_name() und session_id() in Formulare geschrieben.

Löse eines dieser Probleme, und die Sessions sollten wie gewünscht funktionieren. Dabei spielt die Konfiguration von PHP möglicherweise eine entscheidende Rolle.

Wie weit reicht der Scope der Funktion session_id()?

Weit.

Wenn ich nun auf der php Seite session_start() benutze und in den Kontruktoren der Klassen jeweils $sid = session_id().

Kann ich die dann überall benutzen?

Eigentlich schon.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)