PHP Sessions (Sitzungen) und Cookies

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"0true);
?>

<?php
setcookie
("region"$_GET['set_region']);
?>

<?php
$domain 
= ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie('cookiename''data'time()+60*60*24*365'/'$domainfalse);
?>


<?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);
?>

Tipp

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.