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

Comment supprimer les cookies en php

藏色散人
藏色散人original
2020-11-05 11:19:082056parcourir

Comment supprimer les cookies en PHP : 1. Supprimez un seul cookie via "setCookie("name","",time()-60); 2. Supprimez plusieurs cookies en utilisant foreach pour parcourir le tableau.

Comment supprimer les cookies en php

Recommandé : "Tutoriel vidéo PHP"

php Supprimer les cookies

Un moyen simple de supprimer les cookies par lots en PHP

Le code est le suivant :

<?php
//删除单个cookie:键值设置为空、时间设置为过期了的时间
setCookie("name","",time()-60);
//删除多个cookie,采用遍历数组方式
foreach($_COOKIE as $key=>$value){
 setCookie($key,"",time()-60);
}
?>

Points de connaissance : Si tous les cookies d'un site web sont supprimés, le fichier cookie du site web est également enregistré sera supprimé ; si un seul des cookies est supprimé, seules les informations sur les cookies dans le fichier seront supprimées.

Utilisation des cookies PHP

1. Définition des cookies

PHP utilise la fonction SetCookie pour définir les cookies. Une chose à noter est que les cookies font partie de l'en-tête du protocole HTTP et sont utilisés pour transférer des informations entre le navigateur et le serveur, la fonction Cookie doit donc être appelée avant que tout contenu appartenant au fichier HTML lui-même ne soit généré.

La fonction SetCookie définit un Cookie et l'ajoute à la fin de l'en-tête HTTP. Le prototype de la fonction SetCookie est le suivant :

int SetCookie(string name, string value, int expire, string path, string domain, int secure);

Tous les paramètres sauf le nom sont facultatifs. Les trois paramètres value, path et domain peuvent être remplacés par des chaînes vides, indiquant qu'ils ne sont pas définis ; les paramètres expire et secure sont numériques et peuvent être représentés par 0. Le paramètre expire est un horodatage Unix standard, qui peut être obtenu à l'aide de la fonction time() ou mktime(), en secondes. Le paramètre

secure indique si ce cookie est transmis sur le réseau via le protocole HTTPS crypté.

Le cookie actuellement défini ne prend pas effet immédiatement, mais ne sera visible que sur la page suivante, car le cookie est transmis du serveur au navigateur du client dans la page définie et au navigateur. ne le verra pas avant la page suivante. La raison pour laquelle le cookie peut être retiré de la machine du client et renvoyé au serveur.

La configuration des cookies sur la même page se fait en fait de l'arrière vers l'avant, donc si vous souhaitez supprimer un cookie avant d'en insérer un nouveau, vous devez d'abord écrire l'instruction d'insertion puis l'instruction de suppression, sinon cela peut être indésirable des résultats peuvent survenir.

Regardons quelques exemples :

Simple :

SetCookie("MyCookie", "Value of MyCookie");

Avec délai d'expiration :

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时

Avoir tout :

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

Là est un autre point à noter ici. Par exemple, si votre site dispose de plusieurs répertoires différents, alors si vous utilisez uniquement des cookies sans chemin, les cookies définis dans une page d'un répertoire seront définis dans une page d'un autre répertoire, invisible. c'est-à-dire que les cookies sont orientés chemin. En effet, même si le chemin n'est pas précisé, le serveur WEB transmettra automatiquement le chemin actuel au navigateur, et spécifier le chemin obligera le serveur à utiliser le chemin défini. La façon de résoudre ce problème est d'ajouter le chemin et le nom de domaine lors de l'appel de SetCookie. Le format du nom de domaine peut être "www.phpuser.com" ou ". phpuser.com".

La partie représentant la valeur dans la fonction SetCookie sera automatiquement codée une fois passée, c'est-à-dire que si la valeur de la valeur est "valeur de test", elle deviendra "test%20value" une fois passée, ce qui est le cas. la même chose que l'URL. La méthode est la même. Bien entendu, cela est transparent pour le programme, car PHP décode automatiquement la valeur du cookie lorsqu'il la reçoit.

Si vous souhaitez définir plusieurs cookies avec le même nom, utilisez un tableau. La méthode est :

SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");

ou

SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");

2. Recevoir et traiter les cookies

PHP La prise en charge de la réception et du traitement des cookies est très bonne et est entièrement automatique. C'est le même principe que les variables FORM et c'est très simple.

Par exemple, si vous définissez un cookie nommé MyCookier, PHP l'analysera automatiquement à partir de l'en-tête HTTP reçu par le serveur WEB et formera une variable comme une variable ordinaire nommée $myCookie. La valeur de cette variable est. la valeur du cookie. La même chose s'applique aux tableaux. Une autre façon consiste à référencer le tableau de variables globales PHP $HTTP_COOKIE_VARS.

Les exemples sont les suivants : (en supposant qu'ils ont été définis dans les pages précédentes et qu'ils sont toujours valides)

echo $MyCookie;
echo $CookieArray[0];
echo count($CookieArray);
echo $HTTP_COOKIE_VARS["MyCookie"];

C'est aussi simple que cela.

3. Supprimer le cookie

Pour supprimer un cookie existant, il existe deux manières :

Tout d'abord, appelez SetCookie avec uniquement le paramètre name, puis nommez-le ainsi Le cookie de le nom sera supprimé de l'ordinateur de l'utilisateur associé ;

Une autre façon consiste à définir le délai d'expiration du cookie sur time() ou time()-1, puis le cookie sera supprimé après la navigation sur la page Supprimé (. effectivement invalidé).

Il est à noter que lorsqu'un cookie est supprimé, sa valeur est toujours valable sur la page en cours.

4. Restrictions sur l'utilisation des cookies

Tout d'abord, elle doit être définie avant la sortie du contenu du fichier HTML

Deuxièmement, différents navigateurs gèrent les cookies ; de manière incohérente et parfois des résultats incorrects se produiront. Par exemple : MS IE+SERVICE PACK 1 ne peut pas gérer correctement les cookies avec nom de domaine et chemin, Netscape Communicator 4.05 et MS IE 3.0 ne peuvent pas gérer correctement les cookies sans chemin et heure. Quant à MS IE 5, il semble qu'il ne puisse pas gérer les cookies avec le nom de domaine, le chemin et l'heure. C'est quelque chose que j'ai découvert en concevant les pages de ce site.

La troisième limitation est du côté client.

Le nombre maximum de cookies pouvant être créés par un navigateur est de 30, et chaque cookie ne peut excéder 4 Ko. Le nombre total de cookies pouvant être paramétrés par chaque site WEB ne peut excéder 20.

MÉTHODE DE SUPPRESSION DES COOKIES PHP

首先我们看一下php手册中关于删除cookie的说明

------以下引用php手册内容--------------

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

要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除

例子

// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束--------------------------

删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这

也是几乎所有php程序员都会这么做。

后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试了一下

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

结果果然是整个$_COOKIE数组都是空的,而非仅仅$_COOKIE['testcookie']为空.于是用winsock抓包,观察返回的http头,发现http头竟然是

Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT

这说明setcookie("testcookie", '');的的确确是将testcookie这个cookie直接删除.而关于这种情况在php手册中完全没有说明.

最后阅读php源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕直接查源码)

以下代码可以在php5.20的Linux源码包中ext/standard/head.c第99行附近找到.

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

源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0时

sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);

会发送删除cookie的http头给浏览器.

最后我们可以得出结论,在php中使用

setcookie($cookiename, &#39;&#39;);或者 setcookie($cookiename, NULL);

都会删除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