Heim >Backend-Entwicklung >PHP-Problem >So löschen Sie Cookies in PHP

So löschen Sie Cookies in PHP

藏色散人
藏色散人Original
2021-02-08 09:14:322120Durchsuche

In PHP können Sie die Funktion setcookie() verwenden, um Cookies zu löschen. Sie müssen nur den zweiten Parameter der Funktion auf leer setzen oder den dritten Parameter auf einen niedrigeren Wert als die aktuelle Systemzeit setzen. setcookie($ cookiename,'');", "setcookie($cookiename, NULL);" oder "setcookie($cookiename, "", time() - 3600);".

So löschen Sie Cookies in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP 8-Version, DELL G3-Computer.

PHP-Cookies löschen

Schauen wir uns zunächst den Mechanismus verwandter Cookies an.

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )

Um ein Cookie zu löschen, müssen Sie sicherstellen, dass sein Ablaufdatum in der Vergangenheit liegt, um den Löschmechanismus des Browsers auszulösen.

Das folgende Beispiel zeigt, wie man das gerade gesetzte Cookie löscht:

//将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>

Die Möglichkeit, ein Cookie zu löschen, besteht darin, die Gültigkeitsdauer des Cookies auf vor der aktuellen Zeit zu setzen, was fast alle PHP-Programmierer tun.

Später erzählte mir ein Freund, der neu bei PHP war, dass er im Programm den Wert eines Cookies auf leer setzen wollte, das Cookie jedoch direkt gelöscht wurde. Meine erste Reaktion damals war, dass ich es nicht glaubte, also habe ich es getestet:

setcookie("testcookie", '');
print_r($_COOKIE);

Das Ergebnis ist, dass das gesamte $_COOKIE-Array leer ist, nicht nur $_COOKIE['testcookie']. Also habe ich Winsock zum Erfassen des Pakets verwendet und den zurückgegebenen HTTP-Header beobachtet. Dabei stellte ich fest, dass der HTTP-Header „Set-Cookie: testcookie=deleted; Expires=Mo, 18-Jun-2007 02:42:33 GMT“ lautete. , was bedeutet, dass „setcookie(“testcookie „, '');“ tatsächlich das Cookie testcookie löscht, und es gibt überhaupt keine Erklärung zu dieser Situation im PHP-Handbuch.

Endlich den PHP-Quellcode gelesen und endlich die Wahrheit herausgefunden (das ist der Vorteil von Open Source, wenn etwas über die Insider-Geschichte unklar ist, überprüfen Sie einfach den Quellcode direkt).

Der folgende Code befindet sich in der Nähe von Zeile 99 von ext/standard/head.c im Linux-Quellpaket php5.20:

if (value && value_len == 0) {
/*
* MSIE doesn't delete a cookie when you set it to a null value
* so in order to force cookies to be deleted, even on MSIE, we
* pick an expiry date 1 year and 1 second in the past
*/
time_t t = time(NULL) - 31536001;
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
efree(dt);
} else {
sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
if (expires > 0) {
strcat(cookie, "; expires=");
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
strcat(cookie, dt);
efree(dt);
}
}

Der Quellcode zeigt deutlich „if (value && value_len == 0)“, when When „value_len“ ist 0, „sprintf(cookie, „Set-Cookie: %s=deleted; Expires=%s“, name, dt);“ sendet den http-Header zum Löschen des Cookies an den Browser.

Abschließend können wir schlussfolgern: Die Verwendung von „setcookie($cookiename, '');“ oder „setcookie($cookiename, NULL);“ in PHP löscht Cookies, aber eine solche Anleitung gibt es natürlich nicht.

(Empfohlen: „PHP-Video-Tutorial“)

Das obige ist der detaillierte Inhalt vonSo löschen Sie Cookies in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn