Sessions und Cookies Zurück zur Übersicht
Über den Autor
Hallo und willkommen bei meinem Tutorial zum Thema Cookies und Sessions.
Ich denke, einige kennen Cookies und Sessions, vor allem von Foren, Communityseiten, Logins, usw. Ich will mal ein wenig erklären, was das ist und wie man sie nutzt.
Inhalt
1. Was sind Cookies und Sessions? Wo ist der Unterschied?
2. Sessions
3. Cookies
1. Was sind Cookies und Sessions? Wo ist der Unterschied?
In Cookies und Sessions kann man Daten schreiben, die auch beim Wechsel der aktuellen Seite behalten werden. Cookies speichern die Daten dabei auf der Festplatte des Benutzers und Sessions sind nur so lange gültig, wie der Benutzer den Browser offen lässt. Wird der Browser geschlossen, werden auch die Sessions gelöscht, die Cookies bleiben bestehen. Man kann mit Hilfe von Sessions und Cookies Logins für Administrationsbereiche erstellen, aber dem Benutzer auch sagen, wann er das letzte mal auf der Seite war, es gibt viele Einsatzmöglichkeiten.
2. Sessions in PHP
Um Sessions in einer PHP-Seite zu nutzen, muss zu allererst die Funktion session_start() aufgerufen werden. Wichtig dabei ist, dass vorher kein Zeichen ausgegeben wurde, da es sonst zu einem Fehler kommen kann. Man kann die Fehler aber auch umgehen, in dem man die Funktion ob_start() verwendet. Sie Puffert die Ausgabe und lässt zu, dass session_start() ausgeführt werden kann.
PHP-Code:
<?php // Startet die Sessions für den Benutzer // Weiterer Programmcode
Die Session ist nun gestartet und es können Daten in die Session-Variablen gespeichert bzw. aus diesen ausgelesen werden. Die Session-Variablen sehen so aus: $_SESSION['VariablenName']
Bsp.: Benutzer schreibt seinen Namen in ein Textfeld eines Formulars und sendet das Formular ab. Das PHP-Script speichert den Namen in einer Session-Variable und gibt den Namen aus. Da der Name immer ausgegeben werden soll, solange eine Session mit dem Namen vorhanden ist, wird vorher abgefragt, ob die Session bereits existiert. Falls dies der Fall sein sollte, wird das Formular nicht angezeigt.
index.php
PHP-Code:
<?php // Prüft, ob die Session mit dem Benutzernamen vorhanden ist { // Prüft, ob das Formular abgeschickt wurde und das Feld Name ausgefüllt ist { // Formular echo("<form action="index.php" method="post">n"; echo(" Dein Name: <input type="text" name="Name" />n"; echo(" <input type="submit" name="SendeName" value="Ok" />n"; echo("</form>n"; } else { // Speichert den eingegebenen Namen in der Session ab } } // Prüft nochmals, ob die Session mit dem Benutzernamen vorhanden ist. Würde man den Teil als else-Bedingung // an die obere Abfrage hängen, würde nach dem Senden des Formulars der Name noch nicht ausgegeben, erst // beim aktualisieren der Seite { echo("Willkommen ".$_SESSION['BenutzerName']."<br />n"; } ?>
Die Funktion htmlspecialchars("string" wandelt alle Sonderzeichen in HTML-Code um, aus < wird z.B. < und aus & wird &
Will man eine Session-Variable nun löschen, kann man dies mit unset(mixed Var) tun:
PHP-Code:
<?php ?>
Edit, danke an Tarik
Sessions bleiben so lange auf dem Server gespeichert, wie es in der php.ini eingestellt ist. Für den Benutzer hingegen gilt, dass die Session ungültig ist (er nicht wiedererkannt wird), sobald er den Browser schließt.
Will man sämtliche Sessions für den Benutzer löschen (z.B. beim Logout), kann man session_destroy() verwenden.
Edit ende
Zur Sicherheit gibt es noch etwas zu sagen: Die Session wird auf dem Server gespeichert und wenn man nun die Session-ID mit einem Link an einen Freund oder sonst jemanden gibt, dieser den Link verfolgt, ist er mit euren Daten eingelogt, darum immer schön aufpassen, bei der Linkweitergabe. Die meisten Server sind wohl so konfiguriert, dass die Session-ID "unsichtbar" für den Benutzer bleibt, will man sie dennoch benutzen, kann man die ID mit der Funktion session_id() aufrufen.
Ein weiteres gutes Tutorial gibt es auf http://tut.php-q.net/sessions.html
3. Cookies in PHP
Im Gegensatz zu Sessions, werden Cookies auf dem Computer des Benutzers gespeichert. Der Benutzer kann den Browser schließen, den PC Herunterfahren, Neustarten usw. Die Daten bleiben dabei bestehen und können beim nächsten Aufruf der Seite ausgelesen werden. Geeignet ist sowas z.B. um dem User zu sagen, wann er das letzte mal die Seite besucht hat oder um sein Login zu speichern, damit er sich nicht immer wieder neu anmelden muss.
Um Cookies zu setzen, benutzt man die Funktion setcookie().
Bsp: Der Benutzer besucht die Webseite, wir prüfen, ob er bereits ein Cookie hat. Falls ja, geben wir einen Text aus, wann er das letzte mal hier war, ansonsten Speichern wir ein neues Cookie und geben einen Text aus, dass er das erste Mal diese Seite besucht. Wenn er schon einmal da war, werden wir eine Session anlegen, falls sie nicht schon existiert, in der wir speichern, wann er das letzte mal da war. Damit verhindern wir, dass der Benutzer gesagt bekommt, dass er gerade eben schonmal da war. Außerdem prüfen wir, ob der letzte Besuch des Users länger als 30 min her ist, damit er nicht gesagt bekommt, dass er vor 3 min da war. Das Cookie wird bei jedem Klick mit der aktuellen Zeit überschrieben, damit wir möglichst genau den letzten Zeitpunkt seines Besuches haben.
index.php
PHP-Code:
<?php // Prüft, ob eine Session bereits gesetzt wurde { // Prüft, ob das Cookie existiert und ob das Cookie + 30min kleiner als "jetzt" ist { // Session bekommt den Wert vom Cookie $_SESSION['LetzterBesuch'] = $_COOKIE['LetzterBesuch']; } else { // Session bekommt den Wert -1 $_SESSION['LetzterBesuch'] = -1; } } // Prüft den Wert von Session, welcher -1 oder den Wert des Cookies annehmen kann if($_SESSION['LetzterBesuch'] > 0 { // Umwandeln der Zeit aus der Session in Datum und Uhrzeit // Ausgeben, wann der User das letzte Mal da war echo("Du warst das letzte Mal hier am ".$datum.", um ".$uhrzeit." Uhr.<br />n"; } else { // Ausgeben, dass der User das erste Mal da ist echo("Du bist zum ersten Mal auf dieser Seite.<br />n"; } // Cookie speichern ?>
Zur Sicherheit von Cookies gibt es eigentlich auch nicht viel zu sagen. Eine andere Webseite kann das Cookie nicht lesen, aber jemand, der eure Logindaten haben will und zugang zu eurem Rechner bekommt, kann das Cookie aus dem Ordner, in dem es gespeichert ist, rauskopieren und bei sich einfügen und erhält damit eure Daten.
Um ein Cookie zu löschen, kann man ebenfalls die unset() funktion nutzen:
PHP-Code:
<?php ?>
Ein weiteres gutes Tutorial gibt es auf http://tut.php-q.net/cookies.html
Das war also das Tutorial zu Cookies und Sessions, ich hoffe, es hilft einigen interessierten hier weiter bei ihren Projekten.
Bei Fragen stehe ich zur Verfügung.