Hello,
Durch mein '
session_start();
' wird also eine Session gestartet bzw. eine schon bestehende wieder aufgenommen. Session bedeutet, dass es ab diesem Zeitpunkt ein Array mit dem Namen '$_SESSION' gibt, in welches ich jetzt beliebig viele Variablen/Werte schreiben kann
begrenzt durch den für Scripte bereitgestellten Arbeitsspeicher. Da dieser meistens nur 8MB betträgt, solltest Du also rechtzeitig aufhören, das Sessionarray mit Daten zu füttern. Sonst kann es Dir nämlich passieren, dass es zwar noch weggeschrieben, nicht aber wiedergeholt werden kann beiom nächsten Request. Mach einfach mal ein paar Versuche und teile uns Deine Erfahrungen mit.
[...] und andere Seiten, die dann mit dieser Session weiterarbeiten,
gewöhne Dir am besten gleich den Begriff "Seiten" ab und benutze stattdessen "Request". Welche Ressource innerhalb der Domain dieser Request anfordert, ist für den Sessionmechanismus erst einmal irrelevant.
auf diese Werte bzw. dieses Array zugreifen können. In dem Moment, wo eine Session gestartet wird, vergibt der Server auch ein Erkennungsmerkmal für diese Session, damit sie identifiziert werden kann. Dieses Erkennungsmerkmal ist die SID.
Standartmäßig
standardmäißg
hat die SID den Namen 'PHPSESSID' und einen (durch Zufallsgenerator entstandenen?) eindeutigen Wert, der vom Server, auf dem PHP läuft, vergeben wird. Der Name der SID wird ebenfalls durch die php.ini geregelt, nämlich durch den Parameter 'session.name'. Habe ich das soweit richtig verstanden?
Du kannst den Namen auch selber setzen im Script, wenn Du session_name() benutzt, bevor Du session_start() aufrufst. So können in einem Request-Handler auch mehrere Sessiondateienn gleichzeitig verwendet werden.
In meiner php.ini haben die Parameter 'session.use_cookies' und 'session.use_only_cookies' beide den Wert '1'. Das bedeutet, dass der Wert meiner SID automatisch durch ein Cookie beim Client hinterlegt wird.
... dass der Server in seiner Response automatisch die Session-ID als Cookie mitsendet. Ob er vom Client akzeptiert wird, entscheidet der Client.
Ruft nun der Client eine weitere php-Ressource ab, dann sendet er in der Anfrage dafür im Header automatisch den Wert der SID mit.
Er sendet das Name-Value-Pärchen für denn Cookie mit.
Bildlich gesprochen: Er sagt dem Client:
... der Client fordert den Server auf
Nun parse mir bitte die Ressource 'foo.php' ... and by the way ... ich bin der Kunde mit der SID 'bar'. Somit erkennt mich der Server und schickt mir die Ressource 'foo.php' inclusive aller Werte/Variablen des dieser Session dazugehörenden Arrays '$_SESSION'.
Der Server kann die passenden Sessiondaten wiederherstellen und sie in die Auswertung des Requests einfließen lassen. Er behält aber die Daten für sich, wenn Du nicht im Script ausdrücklich etwas anderes (echo ...) bestimmt hast.
Da es sein kann, dass User in ihrem Browser Cookies deaktiviert haben, muß ich mich jetzt aber darum kümmern, dass sich auch diese User beim Aufruf der nächsten Ressource für eine Session identifizieren können - sprich, dass auch diese User die SID auf den Weg mitbekommen.
Du kannst Dich darum kümmern. Du kannst das aber auch getrost PHP überlassen. Dann setze eben nicht den Konfigurationsparameter session.use_only_cookies auf 1 und erlaube die Nutzung einer transparenten SID http://de.php.net/manual/de/session.configuration.php#ini.session.use-trans-sid
PHP baut dann in die erste Response nach dem ersten session_start(), wenn also in keinem der drei Arrays $_COOKIE, $_POST und $_GET eine Session-ID zu finden war, sowohl einen Cookie ein, als auch die transparente SID in alle Formulare als Hidden-Element, in alle Links auf die eigene Domain als Get-Parameter. Das geht erfreulicherweise ganz automatisch, wenn Du es zulässt.
Wenn ich also einen Link von der Session-startenden Seite zu einer nächsten schreibe,
Wenn du eine neue Request-URi baust und in die response einsetzt...
dann mache ich das so:
Dann lasse es PHP für dich tun. :-))
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg