PHP setrawcookie()-Funktion: Alles, was Sie wissen müssen
Erfahren Sie, wie die PHP-Funktion setrawcookie() funktioniert, welche Parameter sie hat und wie sie sich von setcookie() unterscheidet.
Als PHP-Entwickler müssen Sie möglicherweise rohe Cookies für Ihre Webanwendung setzen, um Informationen auf der Client-Seite zu speichern. Die Funktion setrawcookie() ist eine eingebaute PHP-Funktion, mit der Sie ein rohes Cookie setzen können. Im Gegensatz zur Standardfunktion setcookie() kodiert setrawcookie() den Cookie-Wert nicht per URL-Encoding, was sie nützlich macht, wenn Sie vorab kodierte Daten oder binäre Zeichenketten speichern müssen. In diesem Artikel werfen wir einen ausführlichen Blick auf die Funktion setrawcookie() — ihre Syntax, Parameter, die moderne Options-Array-Form, häufige Fallstricke und wie sie sich von setcookie() unterscheidet.
Diese Seite setzt voraus, dass Sie die Grundlagen von PHP-Cookies bereits kennen. Wenn Sie einfach gewöhnlichen Text speichern möchten, ist setcookie() in der Regel die bessere Wahl — verwenden Sie setrawcookie() nur, wenn Sie den Wert genau so senden müssen, wie er ist.
Was ist die setrawcookie()-Funktion?
Die Funktion setrawcookie() ist eine eingebaute PHP-Funktion (verfügbar seit PHP 5.2.0), mit der Sie ein rohes Cookie auf der Client-Seite setzen können. Sie funktioniert, indem sie einen Set-Cookie-HTTP-Antwortheader hinzufügt. Daher — wie jede headeraussendende Funktion — muss sie aufgerufen werden, bevor irgendeine Ausgabe an den Browser gesendet wird (kein ausgegebenes HTML, keine Leerzeilen vor <?php, kein BOM). Wenn die Ausgabe bereits begonnen hat, wird der Header still verworfen. Lesen Sie headers_sent(), um zu erfahren, wie Sie dies erkennen können.
Die Funktion gibt true zurück, wenn der Header erfolgreich in die Warteschlange gestellt wurde, und false bei einem Fehler. Beachten Sie, dass ein true-Rückgabewert nicht garantiert, dass der Browser das Cookie akzeptiert hat oder zurücksendet — es bedeutet nur, dass der Header gesendet wurde.
Verwendung der setrawcookie()-Funktion
Die Verwendung der Funktion setrawcookie() ist unkompliziert. Hier ist die Syntax:
PHP Syntax
setrawcookie($name, $value, $expire, $path, $domain, $secure, $httponly);Die Funktion akzeptiert sieben Parameter:
$name: Der Name des Cookies.$value: Der rohe Wert des Cookies (nicht URL-kodiert).$expire: Die Ablaufzeit als Unix-Zeitstempel.$path: Der Serverpfad, unter dem das Cookie verfügbar sein wird.$domain: Die Domain, unter der das Cookie verfügbar sein wird.$secure: Ob das Cookie nur über HTTPS übertragen werden soll.$httponly: Ob das Cookie für clientseitiges JavaScript unzugänglich sein soll.
Hier ist ein Beispiel, wie die Funktion setrawcookie() verwendet wird, um ein rohes Cookie zu setzen:
Beispiel
<?php
$name = "username";
$value = "john";
$expire = time() + (86400 * 30); // 30 days
$path = "/";
$domain = ".example.com";
$secure = true;
$httponly = true;
setrawcookie($name, $value, $expire, $path, $domain, $secure, $httponly);In diesem Beispiel verwenden wir die Funktion setrawcookie(), um ein rohes Cookie namens username mit dem Wert john zu setzen. Wir geben die Ablaufzeit als 30 Tage ab der aktuellen Zeit an (mit time() als Basis), den Serverpfad als / und die Domain als .example.com. Die Flags secure und httponly sind auf true gesetzt, um sicherzustellen, dass das Cookie nur über HTTPS übertragen wird und für clientseitiges JavaScript unzugänglich ist.
Die Options-Array-Signatur (PHP 7.3+)
Seit PHP 7.3 können Sie ein einzelnes $options-Array anstelle von Positionsargumenten übergeben. Dies ist die empfohlene Form, da es die einzige Möglichkeit ist, das SameSite-Attribut zu setzen, das steuert, ob das Cookie bei seitenübergreifenden Anfragen gesendet wird:
<?php
setrawcookie("username", "john", [
"expires" => time() + (86400 * 30), // 30 days
"path" => "/",
"domain" => ".example.com",
"secure" => true,
"httponly" => true,
"samesite" => "Strict", // "Strict", "Lax", or "None"
]);Bei Verwendung der Array-Form heißt der Schlüssel $expire expires (mit einem s), und samesite hat kein Äquivalent in der Positionssignatur.
Das Cookie wieder auslesen
Ein Cookie, das bei einer Anfrage gesetzt wurde, ist in $_COOKIE erst verfügbar, wenn der Browser es bei einer nachfolgenden Anfrage zurücksendet. Bei dieser späteren Anfrage lesen Sie es wie jedes andere Cookie:
<?php
if (isset($_COOKIE["username"])) {
echo "Welcome back, " . $_COOKIE["username"];
} else {
echo "Cookie not set yet.";
}Da setrawcookie() den Wert nicht kodiert, werden die gespeicherten Bytes genau so zurückgegeben, wie sie sind — es gibt keinen automatischen urldecode()-Schritt beim Einlesen.
Ein rohes Cookie löschen
Um ein Cookie zu entfernen, setzen Sie es erneut mit einer Ablaufzeit in der Vergangenheit. name, path und domain müssen mit dem ursprünglichen Cookie übereinstimmen:
<?php
setrawcookie("username", "", time() - 3600, "/", ".example.com");setrawcookie() vs. setcookie()
Der Hauptunterschied zwischen setcookie() und setrawcookie() liegt in der Behandlung des Cookie-Werts. setcookie() kodiert den Wert automatisch per URL-Encoding mit rawurlencode(), was für Standardtext sicher ist, aber Probleme verursachen kann, wenn Sie vorab kodierte Daten oder binäre Zeichenketten speichern müssen. setrawcookie() überspringt diesen Kodierungsschritt und gibt Ihnen die volle Kontrolle über den rohen Wert. Für die meisten Standardanwendungsfälle ist setcookie() bevorzugt, aber setrawcookie() ist unverzichtbar, wenn Sie mit bereits kodierten Daten arbeiten.
Eine praktische Konsequenz: Mit setrawcookie() sind Sie dafür verantwortlich, dass der Wert cookie-sicher ist. Ein roher Cookie-Wert darf keine bestimmten Zeichen enthalten — Steuerzeichen, Leerzeichen, Kommas, Semikolons oder Gleichheitszeichen — da diese im Set-Cookie-Header eine besondere Bedeutung haben. Wenn Ihr Wert solche Zeichen enthalten könnte, kodieren Sie ihn selbst (zum Beispiel mit rawurlencode()), bevor Sie ihn übergeben:
<?php
$raw = rawurlencode("john doe; admin=1"); // pre-encode unsafe bytes
setrawcookie("username", $raw, time() + 3600, "/");| Aspekt | setcookie() | setrawcookie() |
|---|---|---|
| URL-kodiert den Wert | Ja (rawurlencode()) | Nein |
| Gut für einfachen Text | Ja | Funktioniert, aber kein Vorteil |
| Gut für vorab kodierte / binäre Daten | Nein (doppelt kodiert) | Ja |
| Gleiche Parameter & Options-Array | Ja | Ja |
Fazit
Die Funktion setrawcookie() ist ein nützliches Werkzeug zum Setzen von rohen Cookies in Ihrer PHP-Webanwendung. Wenn Sie ihre Syntax, Parameter, die Options-Array-Form und die Unterschiede zu setcookie() verstehen, können Sie vorab kodierte Daten sicher auf der Client-Seite speichern. Denken Sie daran, sie vor jeder Ausgabe aufzurufen, das Options-Array zu bevorzugen, damit Sie SameSite setzen können, und sie nur dann zu verwenden, wenn Sie das URL-Encoding wirklich umgehen müssen.
Verwandte Themen
- PHP Cookies — das Gesamtbild, wie Cookies in PHP funktionieren.
setcookie()— der standardmäßige, URL-kodierende Cookie-Setter.- PHP Sessions — serverseitiger Zustand, eine Alternative zu Cookies.
header()— beliebige HTTP-Header manuell senden.headers_sent()— prüfen, ob Header bereits gesendet wurden.