PHP Sessions (Sitzungen) und Cookies
![[Bildschirmfoto]
PHP Sessions (Sitzungen) und Cookies [Bildschirmfoto]
PHP Sessions (Sitzungen) und Cookies](img/php_sessions.png)
Sitzungen sind eine weitere Methode, um Daten von einer Seite zu einer anderen Seite (der gleichen Domain) verfügbar zu machen. Wenn ein Besucher auf eine Website zugreift, weist ihm der Server eine eindeutige ID (so genannte Sitzungs-ID oder SID) zu.
Diese wird entweder in einem Cookie (mit dem Namen PHPSESSID) auf dem Benutzercomputer gespeichert oder in der URL weitergegeben (wenn der Browser keine Cookies akzeptiert).
Basierend auf dieser SID wird eine eindeutige Datei mit den Sitzungsdaten auf dem Server erstellt, in einem Verzeichnis gespeichert, wie von der session.save_path
in der Datei "php.ini" festgelegt.
Wenn eine Sitzung initiiert wird, speichert der Server Sitzungswerte in der superglobalen Variable $_SESSION
, auf die von anderen Seiten (der gleichen Domain) zugegriffen werden kann,
solange die Sitzung aktiv bleibt. Normalerweise bleibt eine Sitzung aktiv, bis der Browser geschlossen wird.
Festlegen von Sitzungsvariablen
Jede Seite, die Sitzungen verwendet, muss zunächst die session_start()
-Funktion aufrufen.
Dieser Befehl sollte nur einmal auf jeder Seite aufgerufen werden, bevor das PHP-Skript eine Ausgabe generiert oder die Variablen $_SESSION
verwendet, so dass die beste Position am Anfang der PHP-Datei ist.
Die richtige Möglichkeit zum festlegen und speichern einer Sitzungsvariablen besteht darin, sie dem superglobalen Array "$_SESSION" hinzuzufügen, so wie Sie eine normale Variable zuweisen würden.
- Beispiel: $_SESSION['site']
kann jetzt auf jeder Seite verwendet werden, die session_start()
aufruft.
<?php
session_start(); // Starte die Session
// Speichern von Inhalt in einer Session
$_SESSION['site'] = 'werner-zenk.de';
?>
<html>
...
Zugriff auf Sitzungsvariablen
Nachdem eine Sitzung gestartet wurde und die Variable "$_SESSION" registriert wurde, können Sie auf die gleiche Weise auf ein Arrayelement zugreifen und diese verwenden,
und zwar auf jeder Seite, die die session_start()
-Funktion aufruft.
Um den Wert einer Variablen $_SESSION
zu ändern, weisen Sie ihr einfach einen anderen Wert zu.
Löschen / Zerstören von Sitzungsvariablen
Um eine einzelne Sitzungsvariable zu löschen, können Sie die unset()
-Funktion verwenden (die mit jeder Variablen in PHP funktioniert):
Um jede Sitzungsvariable zu löschen, setzen Sie das gesamte Array von $_SESSION
zurück:
Um alle Daten, die der aktuellen Sitzung zugeordnet sind, vom Server zu entfernen, verwenden Sie session_destroy()
.
unset($_SESSION['name']); $_SESSION = array(); session_destroy();
Cookies
Cookies müssen nicht ein wesentlicher Bestandteil einer Website sein, sondern können einige der "kleinen Dinge" liefern, die Ihre Website vom Rest abheben können. Cookies sind kleine Informationen, die Sie auf dem Computer des Clients speichern, damit Sie beim nächsten Besuch der Website darauf zugreifen können. Sitzungs-IDs werden in der Regel auch in Cookies gehalten.
<?php
$inhalt = 'Hallo Welt!';
$dauer = time()+60*60*24*30; // 30 Tage
setcookie("name", $inhalt, $dauer, '/');
?>
<?php
setcookie( "TestCookie", "inhalt", strtotime('+30 days') );
?>
<?php
setcookie("TestCookie", "inhalt", time(), "/", "example.com", 0, true);
?>
<?php
setcookie("region", $_GET['set_region']);
?>
<?php
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie('cookiename', 'data', time()+60*60*24*365, '/', $domain, false);
?>
<?php
// PHP 7.3
$name = 'cookiename';
$value = 'content';
$duration = time()+60*60*24*30;
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie($name, $value, [
'expires' => $duration,
'path' => '/',
'domain' => $domain,
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
?>
<?php
// PHP 7.3
$name = 'cookiename';
$value = 'content';
$duration = strtotime('+30 days');
$domain = 'example.com';
setcookie($name, $value, [
'expires' => $duration,
'path' => '/',
//'domain' => $domain,
'secure' => true,
'httponly' => false,
'samesite' => 'Lax',
]);
?>
setcookie(name, value, expire, path, domain, secure, httponly, samesite);
name (Erforderlich)
Gibt den Namen des Cookies an.
value (Optional)
Gibt den Wert des Cookies an.
expire (Optional)
Gibt an, wann das Cookie abläuft. Der Wert: time()+86400*30, setzt das Cookie in 30 Tagen ab.
Wenn dieser Parameter weggelassen oder auf 0 gesetzt wird, läuft das Cookie am Ende der Sitzung ab (wenn der Browser geschlossen wird). Der Standard ist 0.
path (Optional)
Gibt den Serverpfad des Cookies an. Wenn auf "/" gesetzt, ist das Cookie innerhalb der gesamten Domain verfügbar.
Wenn auf "/php/" gesetzt, ist das Cookie nur im PHP-Verzeichnis und in allen Unterverzeichnissen von php verfügbar.
Der Standardwert ist das aktuelle Verzeichnis, in dem das Cookie liegt.
domain (Optional)
Gibt den Domänennamen des Cookies an. Um das Cookie auf allen Subdomains von example.com verfügbar zu machen,
setzen Sie die Domäne auf "example.com". Wenn Sie es auf www.example.com festlegen, wird das Cookie nur in der Unterdomäne www verfügbar
secure (Optional)
Gibt an, ob das Cookie nur über eine sichere HTTPS-Verbindung übertragen werden soll.
TRUE gibt an, dass das Cookie nur gesetzt wird, wenn eine sichere Verbindung besteht. Standard ist FALSE
httponly (Optional)
Wenn auf TRUE gesetzt, kann auf das Cookie nur über das HTTP-Protokoll zugegriffen werden (das Cookie ist nicht über Skriptsprachen zugänglich).
Diese Einstellung kann dazu beitragen, Identitätsdiebstahl durch XSS-Angriffe zu reduzieren. Standard ist FALSE
samesite (Optional)
Mit dem SameSite-Attribut des Set-Cookie-HTTP-Antwortheaders können Sie deklarieren, ob Ihr Cookie auf einen Kontext für einen Standort beschränkt werden soll.
• Lax
Cookies dürfen mit Verzeichnissen der obersten Ebene gesendet werden und werden zusammen mit der GET-Anfrage gesendet, die von der third-party
(Webseiten dritter) initiiert wurde. Dies ist der Standardwert in modernen Browsern.
• Strict
Cookies werden nur in einem first-party
(gleiche Webseite) gesendet und nicht zusammen mit Anfragen gesendet, die von third-party
(Webseiten dritter) initiiert werden.
• None
Cookies werden in allen Kontexten gesendet.
None war der Standardwert, aber aktuelle Browserversionen machten "Lax" zum Standardwert, um eine einigermaßen robuste Verteidigung gegen einige Klassen von CSRF-Angriffen (Cross-Site Request Forgery) zu bieten.
➜ None erfordert das Secure-Attribut in den neuesten Browserversionen.
Cookies auslesen
Cookies können ähnlich wie Sessions ausgelesen werden.
<?php
$cookie = $_COOKIE["name"];
echo "Der Inhalt des Cookies: $cookie";
?>
<?php
if (isset($_COOKIE["name"])) {
...
}
?>
Cookies Löschen
Um ein Cookie zu löschen, muss man einen Zeitpunkt in der Vergangenheit angeben. Dadurch erkennt der Browser, dass dieser Cookie abgelaufen ist, und löscht diesen:
<?php
setcookie("name","",time() - 3600);
?>
Tipps
- Cookie-Kurs: Erstellen Sie ein Cookie (JavaScript) in 5 Schritten
- Cookies (Kekse) machen das Web persönlicher, Cookies erkennen Homepage-Besucher wieder und ermöglichen einen individuellen Service.
- Benutzereingaben mit JavaScript lokal speichern
- HTML 5 bietet uns die Möglichkeit, mittels des
localStorage
(JavaScript) einfache Daten im Browser zu speichern. Auch wenn man zwischendurch weg surft und dann wieder kommt sind die Daten noch auslesbar.