Sessions
Mit PHP Sessions hat man die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen eurer Website festzuhalten.
Dem Besucher wird eine einzigartige Session-IDzugeordnet. Somit kann PHP den Besucher genau Identifizieren. Diese Session ID wird entweder als Cookie gespeichert oder mit an die URL gehängt.
Mit PHP Sessions könnt ihr jetzt theoretisch unendlich viele Variablen, ink. Werte, für einen Besucher speichern, z.B. seinen Username, was er ganz am Anfang in ein Formular eingegeben hat und vieles mehr.
Diese Werte könnt ihr später ausgeben und damit auch arbeiten, z.B. überprüfen lassen.
Sicherheit und Anwendungsbereich Sessions bieten zwar keine 100%tige Sicherheit, dennoch sind sie relativ sicher.
Eine entführte (geklaute) Session-ID ermöglicht dem Dieb, auf alle Daten zuzugreifen, die mit dieser Session-ID verbunden sind.
Man benutzt bei sehr vielen Scripts Sessions, z.B. Loginsysteme (Foren & Portale), Warenkörbe etc., deswegen lohnt es sich immer, diese Funktion zu erlernen.
Wie bekommt der Angreifer denn die Sesion ID herraus?
Das passiert vor allem, wenn die andere Person eine URL mit der Session ID an eine weitere Person weitergibt. Dies kann aber auch passieren, wenn die Session IDs in den Logfiles auftauchen.
Session ID durch Zufall erraten
Natürlich kann der Dieb auch eine Session ID erraten, allerdings ist dies sehr unwahrscheinlich.
[url=“http://www.php-einfach.de/php-tutorial/php-session-erraten.php“]Wahrscheinlichkeitsrechnung anschauen
Erste Schritte
Ganz oben auf der Site, bevor wir irgend etwas ausgeben, egal ob mit PHP oder mit HTML, muss folgendes stehen:
<?php session_start();?>
Mit session_start(); sagen wir dem PHP Script, dass diese Seite mit Session arbeitet.
Dieser Code muss immer ganz oben stehen, wenn ihr mit irgendwelchen Session Befehlen arbeitet.
Hier sind zwei mögliche Fehlerquellen:
1. Cannot send session cookie – headers already sent byWenn diese Fehlermeldung erscheint, dann ist irgendwo vor dem kleinen Script eine Ausgabe. Eine leere Zeile (Zeilenumbruch) oder ein Space reicht schon aus.
2. Warning: session_start() [function.session-start]: open(…) failed: No such file or directory
Wenn diese Warnung erscheint, dann ist der angegebene Pfad zur Speicherung der Session Datei nicht verfügbar.
Als nächstes schauen wir, wie wir eine Session-Variable registieren:
<?php $_SESSION['name']="wert";?>
Falls du eine ältere PHP Version als 4.1.0 benutzen, musst du $HTTP_SESSION_VARS[’name‘] benutzen.
Um den obigen Wert auszugeben, speichern wir vorher die Session-Variable in einer Variable
<?php $name = $_SESSION['name']; echo $name;?>
Wenn wir keine extra Variablen benutzen möchten, so können wir den Session Befehl nicht direkt in die Zeichkette schreiben.
So geht es aber:
<?php echo "Hallo ".$_SESSION['name']." Mueller";?>
Dies scheint zwar nicht viel zu sein, allerdings können wir eine Session-Variable genauso behandeln, wie eine normale Variable, nur müssen wir manchmal auf die Anführrungzeichen achten..
Um eine Session zu registieren, benutzt man normalerweise folgenden Script:
<?php if(!isset($_SESSION['name'])) { $_SESSION['name']="Klaus"; }?>
Hier wird zuerst überprüft ob, es die Session-Varibale schon gibt. Falls es sie nicht gibt, wird sie registriert.
Würde wir anstatt !isset isset schreiben, könnten wir überprüfen, ob die Session registriert wurde, oder nicht. Dies benutzt man bei Logins.
Um alle Session-Daten der Sitzung zu löschen, benutzt mansession_destroy()
<?php session_destroy();?>
Dieser Befehl löscht alle Daten der Session.
Dieser Befehl kann nur auf Seiten eingesetzt werden, die mit session_start() beginnen. Dies ist bei allen Session-Befehlen der Fall.
Um eine einzelne Session zu deaktivieren, benötigt manunset
<?php unset($_SESSION['name']);?>
Dieser Befehl löscht die Werte für die Session-Variablename.
Beispiel
Damit das etwas verständlicher wird, ist hier ein kleines Beispiel. Dabei gibt man zuerst einen Wert in ein Formular ein:
formular.html:
<form action=“seite1.php“ method=“post“>
Dein Name: <br>
<input type=“Text“ name=“name“>
<input type=“Submit“>
</form>
seite1.php
<?php session_start();//Ganz wichtig $name = $_POST['name'];if(!isset($name)) { $name ="Gast"; }//Session registieren $_SESSION['username']= $name;//Text ausgeben echo "Hallo $name <br> <a href=seite2.php>Weiter</a>";?>
seite2.php
<?php session_start();//Ganz wichtig//In $name den Wert der Session speichern $name = $_SESSION['username'];//Text ausgeben echo "Du heißt immer noch: $name";?>
Dies ist ein ganz simples Beispiel, zeigt aber gleich die Stärke von Sessions.
Bei dem Formular geben wir unseren Namen an, diese Daten werden dann an seite1.php gesendet. Dort werden sie abgefragt, und der name aus dem Formular wird in der Session username gespeichert.
Wenn wir dann auf den Link klicken, und auf seite2.php gelangen, so können wir dort weiter den Namen des Besuchers (der Names aus dem Formular) ausgeben.
Dies könnte man über beliebig viele Seiten weiterführen, mit unbegrentzt vielen Session-Variablen.