Maison > Article > développement back-end > php ne peut pas supprimer les cookies
Regardons d'abord le mécanisme des cookies associés.
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 :
<?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 la date actuelle time
C'est ce que font 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 sur 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é :
setcookie("testcookie", ''); print_r($_COOKIE);
Le résultat a été que tout le tableau $_COOKIE était 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". , 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.
Le code suivant se trouve près de la ligne 99 de ext/standard/head.c dans le paquet source Linux php5.20 :
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); } }
C'est clair dans le code source L'affichage de “if (value && value_len == 0)”,当“value_len”为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.
Le contenu ci-dessus est à titre de référence uniquement !
Tutoriel 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!