yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Sessions - Was ist das und wie wendet man sie an?



Als erstes stellt sich die Frage, was Sessions sind. Sessions sind frei übersetzt "Sitzungen" auf einer Internetseite. Während dieser Sitzung kann man Daten speichern und wieder auslesen. Sobald die Seite verlassen wird (bzw. der Browser geschlossen wird), verfällt die Session und damit die gespeicherten Daten.
Nun, wozu kann man Sessions verwenden? Man kann Daten speichern und auslesen, ohne dass der Benutzer Zugriff auf diese Daten hat. Denn die Daten werden auf dem Server gespeichert und können nur durch die Seite selber verändert werden. So kann man einen Login mit Sessions realisieren und abfragen, ob ein Benutzer eingeloggt ist und wenn ja, mit welchem Benutzernamen. Eine weitere Verwendungsmöglichkeit wäre z.B. bei einem Onlineshop, wo man Artikel, die in den virtuellen Warenkorb gelegt hat, speichern und abrufen kann.
Natürlich sind das nur einige Anwendungsbeispiele.

Aber wie nutzt man die Sessions?
Im Grunde ist das sehr einfach: Elementar ist die Funktion session_start();. Damit startet man in einem PHP-Dokument die Session. Überall, wo man auf Sessions zugreifen will, egal ob speichern oder lesen, muss session_start() aufgerufen werden. Wichtig hierbei ist, dass dieser Aufruf vor jeglicher Ausgabe von Text geschehen muss:
PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
<?
// Session richtig starten
session_start();
echo 
"Ich arbeite mit Sessions!";

-------------------------------

// Session falsch starten
echo "Ich arbeite mit Sessions!";
session_start();
?>


Daten in einer Session speichern ist im Grunde wie das ganz normale Zuweisen von Werten. Man bedient sich an der Variable $_SESSION, um in der Session Daten zu speichern und auszulesen (Das Session muss groß geschrieben werden):
PHP-Datei:
1
2
3
4
5
6
7
8
9
10
<?
session_start
();

// Zuweisen
$_SESSION['ErsteVariable']="Hallo, dies ist meine erste Variable mit Sessions";

// Auslesen
echo $_SESSION['ErsteVariable'];
// Ausgabe: "Hallo, dies ist meine erste Variable mit Sessions"
?>





Gehen wir mal weiter auf die Materie der Sessions ein: Sessions sind im Grunde auch nur Cookies. Cookies, die mit Schließen des Browsers gelöscht werden. Nun stellt sich die Frage, wo dieser Cookie abgelegt wird.
Einerseits bietet sich sich die Speicherung beim Besucher an. Hier liegen die Daten ganz allein beim Besucher und sind vor dem Auslesen von anderen Besuchern relativ sicher. Was passiert aber, wenn der Benutzer keine Cookies aktivert hat und somit der Cookie nicht beim Besucher auf seinem PC gesetzt werden kann? Dann wird der Cookie auf dem Server gesetzt.
Als Schutz, dass sich die Session des einen Benutzers nicht mit der eines anderen Benutzers vermischt und es somit zu falschen Angaben kommt, erhält jeder Benutzer eine sogenannte Session-ID zugewiesen. Diese ist 32 Zeichen lang, zusammengesetzt aus zufällig gewählten Buchstaben und Zahlen. Somit wird theoretisch 100%-ig ausgeschlossen, dass zwei Benutzer die gleiche Session-ID erhalten und sich deren gespeicherten Daten überschneiden.

Kann der Session-Cookie bei dem Benutzer gesetzt werden, merkt der Benutzer selber nichts, dass eine Session im Hintergrund läuft. Der Cookie wird gesetzt und die Daten darin gespeichert. Problematischer wird es, wenn der Cookie auf dem Server gesetzt werden muss: Wie soll der Server einen Cookie einen bestimmten Benutzer zuweisen? Und da greift die Session-ID. Der Server erkennt, dass der Cookie nicht angenommen wurde und erweitert jede Adresse auf der Seite um die Session-ID. Nur so kann sichergestellt werden, dass der richtige Besucher auch "seinen" Cookie bekommt.
Auslesen kann man die Session-ID mit der Funktion session_id():
PHP-Datei:
1
2
3
4
5
6
7
<?
session_start
();
$_SESSION['startzeit']=date("h:m:s");

echo 
"Hallo! Deine Session wurde um ".$_SESSION['startzeit']." gestartet und hat die ID ".session_id();
// Ausgabe z.B. "Hallo! Deine Session wurde um 21:12:57 gestartet und hat die ID cb7dc4a9003b1d45c801a45b2c189495"
?>


Eine ältere Variante des Anwenden von Sessions funktioniert noch mit separatem Registrieren einer Variablen als Session-Variable (session_register()), dies fällt aber mit der Schreibweise $_SESSION weg und erleichtert das Handling mit Sessions immens.
Um eine Session vorzeitig zu beenden, bedient man sich der Funktion session_destroy():
PHP-Datei:
1
2
3
4
5
6
7
8
9
10
<?
session_start
();

echo 
session_id();
// Ausgabe z.B. "cb7dc4a9003b1d45c801a45b2c189495"

session_destroy();
echo 
session_id();
// Keine Ausgabe, da Session beendet
?>


Hoffe, euch den Umgang mit Session etwas vereinfacht zu haben. Wenn du mehr Infos möchtest, schau mal auf der PHP-Referenz für Sessions nach.



Geschrieben von Phil Marx am 18.06.2004 (7957x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

wow!

da haste dir echt Mühe gegeben, sehr ausführlich - respekt!
Geschrieben von michi
kann ich mich michi's Meinung nur anschließen, sehr gut!
Geschrieben von darealplaya
finde, es ist für den Anfang eine gute Erklärung ... werde ich nun auch mal testen!
Geschrieben von René
Ah gut! Nun kann ich mich da mal endlich besser reinknien! Gleich meinen Lokalen Login mal drauf umproggen :D
Geschrieben von DiWoWo
Super Beschreibung!
Geschrieben von Billy
Ich schließe mich dem an, aber würde den z.b. nen winziger login mit sessions net möglich sein,... also das dann Erscheint sie sind eingeloggt unter(dem was man angegeben hat) .. udn wenn man net is, das dann das zum eintragen erfolgt?
Geschrieben von Blacksoul