Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon de supprimer les instances de cookies en php

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

小云云
小云云original
2018-03-10 09:06:291231parcourir

Cet article partage principalement avec vous l'explication détaillée de la façon de supprimer les instances de cookies en PHP. Examinons d'abord le mécanisme des cookies associés, en espérant aider tout le monde.

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

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

//将过期时间设为一小时前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 la date actuelle. C'est aussi le cas de 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 a été que je n'y croyais pas, alors j'ai testé
 :

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

Le résultat était que tout le tableau $_COOKIE était vide, pas seulement $_COOKIE['testcookie ']. nul. 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 de php et découvrez enfin la vérité (c'est l'avantage de l'open source, s'il y a quelque chose de flou dans l'histoire intérieure, vérifiez simplement le code source directement).

Copiez le code comme suit :

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

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 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.

Recommandations associées :

Explication détaillée de l'obtention et de la suppression des cookies à l'aide de JavaScript

Comment supprimer les cookies en php

Classe de cookie php (définir, obtenir, supprimer la valeur du cookie)

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