Maison  >  Article  >  développement back-end  >  Comment supprimer les cookies en utilisant php setcookie

Comment supprimer les cookies en utilisant php setcookie

藏色散人
藏色散人original
2021-10-27 10:02:202303parcourir

Comment supprimer les cookies à l'aide de php setcookie : 1. Créez un exemple de fichier PHP ; 2. Supprimez un cookie via la méthode "setcookie("TestCookie", "", time() - 3600);"

Comment supprimer les cookies en utilisant php setcookie

L'environnement d'exploitation de cet article : Système Windows 7, PHP version 7.1, ordinateur DELL G3

php setcookie Comment supprimer les cookies ?

php Explication détaillée de la façon de supprimer les cookies :

Regardons d'abord le mécanisme des cookies associés.

Le code est le suivant :

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

Pour supprimer un cookie, vous devez vous assurer que sa date d'expiration est passée pour déclencher le mécanisme de suppression du navigateur.

L'exemple suivant illustre comment supprimer le cookie que vous venez de définir :

Le code est le suivant :

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

La façon de supprimer un cookie est de définir la période de validité du cookie avant l'heure actuelle. presque tous les programmeurs PHP le font.

Plus tard, un ami qui était nouveau sur PHP m'a dit qu'il voulait définir la valeur d'un cookie à vide dans le programme, mais le cookie a été supprimé directement. Ma première réaction à l'époque a été que je n'y croyais pas, alors je l'ai testé :

Le code est le suivant :


setcookie("testcookie", &#39;&#39;);
print_r($_COOKIE);

Le résultat est que tout le tableau $_COOKIE est vide, pas seulement $_COOKIE[' cookie de test']. J'ai donc utilisé Winsock pour capturer le paquet et observé l'en-tête http renvoyé. J'ai découvert que l'en-tête http s'est avéré être "Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT". , ce qui signifie "setcookie("testcookie ", '');" supprime en effet directement le cookie testcookie, et il n'y a aucune explication dans le manuel PHP sur cette situation.

Enfin, lisez le code source php et trouvez enfin la vérité (c'est l'avantage de l'open source, s'il y a une histoire intérieure peu claire, vérifiez simplement le code source directement).

Le code suivant se trouve près de la ligne 99 de ext/standard/head.c dans le package source Linux php5.20 :

Le code est le suivant :

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

Le code source indique clairement "if (value && value_len == 0)", lorsque "value_len" est 0, "sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);" enverra l'en-tête http pour supprimer le cookie à le navigateur.

Enfin, nous pouvons conclure : utiliser "setcookie($cookiename, '');" ou "setcookie($cookiename, NULL);" en php supprimera les cookies, mais bien sûr, il n'existe pas de manuel de ce type.

N'est-ce pas très simple ? Parfois, nous devons encore lire attentivement le code source de php.

Apprentissage recommandé : "

Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn