Heim > Backend-Entwicklung > PHP-Problem > PHP kann keine Cookies löschen

PHP kann keine Cookies löschen

王林
Freigeben: 2023-02-24 10:10:02
Original
4003 Leute haben es durchsucht

PHP kann keine Cookies löschen

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

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
Nach dem Login kopieren

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

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

Die Möglichkeit, ein Cookie zu löschen, besteht darin, die Gültigkeitsdauer des Cookies auf vor dem aktuellen festzulegen Zeit

Das machen fast alle PHP-Programmierer. Später erzählte mir ein Freund, der neu bei PHP war, dass er den Wert eines Cookies im Programm 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", &#39;&#39;);
print_r($_COOKIE);
Nach dem Login kopieren

Das Ergebnis war, dass das gesamte $_COOKIE-Array leer war, 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.

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&#39;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);
    }
}
Nach dem Login kopieren

Es ist klar in der Quellcode Wenn Sie “if (value && value_len == 0)”,当“value_len”为0时,“sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);” anzeigen, wird der HTTP-Header zum Löschen des Cookies an den Browser gesendet.

Schließlich können wir daraus schließen, dass die Verwendung von „setcookie($cookiename, '');“ oder „setcookie($cookiename, NULL);“ Cookies löscht.

Der obige Inhalt dient nur als Referenz!

Empfohlenes Tutorial: PHP-Video-Tutorial

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

Verwandte Etiketten:
Erklärung dieser Website
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage