Mittwoch, 11. März 2015

PHP Sessions

Mit PHP besteht die Möglichkeit sogenannte Sessions zu erstellen, also User Sitzungen, mit denen Daten global und für spätere Zugriffe gespeichert werden können. Ein Anwendungsbeispiel sind zum Beispiel Loginfunktionen: Der Benutzer gibt am Anfang einmal Name und Passwort an, passt dieses, wird er angemeldet, also eine Session angelegt, in anderen Skripts kann nun überprüft werden, ob der Benutzer angemeldet ist und was er machen darf.
Jede Session hat eine ID, anhand welcher sie eindeutig identifiziert werden kann. Diese wird standardmäßig in einem Cookie gespeichert, sodass der Nutzer beim nächsten Besuch / Aufruf immer noch seine Session besitzt. Die ID kann aber auch zum Beispiel an die URL angehängt werden.
Neben der ID lassen sich noch quasi beliebig viele andere Variablen in der Session speichern.

Möchten wir in PHP eine Session benutzen, benutzen wir im Code die Funktion session_start(). Mittels $_SESSION['x'] können wir dann auf die Variable x zugreifen. Praktisch ist außerdem die Funktion isset(), mit welcher wir prüfen können, ob eine Variable bereits existiert und nicht NULL ist. So können wir auch testen, ob bereits eine Session für den aktuellen Benutzer existiert.

Das folgende Skript legt beim 1. Aufruf durch den Nutzer eine Session Variable "visited" an und schreibt in diese irgendwas. So gibt bei späteren Aufrufen durch den gleichen Nutzer (bzw. jemand, der den richtigen Cookie in seinem Cache hat) die Funktion isset(visited) true zurück und das Skript erkennt den Besucher wieder:

<?php
session_start();

if(!isset($_SESSION['visited']))
{
   echo "First time!";
   $_SESSION['visited'] = "something";

else
{
     echo "Visited";
}
?>

Ihr findet das Skript auf http://bloggeroliver.bplaced.net/PHPExamples/session.php.
In einem späteren Post werde ich ein Loginsystem beschreiben, hier abschließend ein wenigstens etwas sinnvolleres Beispiel als das obige, ein Besucherzähler (http://bloggeroliver.bplaced.net/PHPExamples/counter.php):

<?php
session_start();

if(!isset($_SESSION['counter']))
{
   $_SESSION['counter'] = 0;
}  
$_SESSION['counter']++;

echo $_SESSION['counter'];
?>

Um die Session zu vernichten, müssen wir zum einen alle Session Daten löschen und die Session beenden:

$_SESSION = array();
session_destroy();

Aber auch dies reicht noch nicht, denn der Cookie ist noch vorhanden und könnte genutzt werden. Deswegen müssen wir auch den Cookie löschen, was ich hier aber nicht beschreiben möchte.
Denn zum einen wird die Session automatisch beendet, falls wir sie mit einem Browser erzeugt haben und diesen beenden. Zum anderen ist dieser Blog ja auf C# ausgerichtet und wir werden später Sessions mit C# benutzen. Also können wir den Cookie dort löschen.

Keine Kommentare:

Kommentar veröffentlichen