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

Comment supprimer les cookies en php

怪我咯
怪我咯original
2017-07-13 17:42:26956parcourir

Cet article présente brièvement la méthode de suppression des cookies en php , qui consiste à définir la durée de validité du cookie ou à le rendre vide. C'est une astuce très pratique que je recommande à tout le monde ici.

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 dans le passé pour déclencher le mécanisme de suppression du navigateur .

L'exemple suivant illustre comment supprimer le cookie qui vient d'être défini :

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 validité période du cookie à l'heure actuelle, c'est ce que feraient presque tous les programmeurs PHP.

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 c'est que je n'y croyais pas, alors j'ai testé
:

Le code est le suivant :

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

Le résultat est que la totalité du $ _COOKIEarray est vide, pas seulement $_COOKIE['testcookie']. 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". Cela montre que "setcookie("testcookie", '');" supprime effectivement le cookie testcookie directement, mais il n'y a aucune explication dans le manuel php à propos de cette situation .

Enfin, lisez le code source php et découvrez 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);
    }
}

Code source Il affiche 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 au navigateur.

Enfin, nous pouvons conclure que l'utilisation de "setcookie($cookiename, '');" ou "setcookie($cookiename, NULL);" en php supprimera les cookies, mais bien sûr, ce n'est pas dans ces manuels.

N'est-ce pas très simple ? Parfois, nous devons encore lire attentivement le code source de 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