Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung zum Löschen von Cookie-Instanzen in PHP

Detaillierte Erklärung zum Löschen von Cookie-Instanzen in PHP

小云云
小云云Original
2018-03-10 09:06:291220Durchsuche

In diesem Artikel erfahren Sie hauptsächlich, wie Sie Cookie-Instanzen in PHP löschen. Schauen wir uns zunächst den Mechanismus verwandter Cookies an und hoffen, dass er allen hilft.

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 das gerade gesetzte Cookie gelöscht wird:

//将过期时间设为一小时前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 dem aktuellen festzulegen Dies ist auch der Fall. Fast alle PHP-Programmierer tun dies.

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

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

Das Ergebnis war, dass das gesamte $_COOKIE-Array leer war, nicht nur $_COOKIE['testcookie ']. null. 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 es unklare Insider-Geschichten gibt, überprüfen Sie einfach den Quellcode direkt).

Kopieren Sie den Code wie folgt:

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)“ an. Wenn „value_len“ 0 ist, wird „sprintf( cookie, „Set-Cookie: %s=deleted; Expires=%s“, Name, dt);“ sendet den HTTP-Header zum Löschen des Cookies an den Browser.

Schließlich können wir daraus schließen, dass die Verwendung von „setcookie($cookiename, '');“ oder „setcookie($cookiename, NULL);“ in PHP Cookies löscht, aber das steht natürlich nicht in diesen Handbüchern.

Ist es nicht ganz einfach? Manchmal müssen wir den PHP-Quellcode trotzdem sorgfältig lesen.

Verwandte Empfehlungen:

Detaillierte Erklärung zum Erhalten von Cookies und zum Löschen von Cookies mit JavaScript

So löschen Sie Cookies in PHP

PHP-Cookie-Klasse (Cookie-Wert festlegen, abrufen, löschen)

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung zum Löschen von Cookie-Instanzen 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