web-dev-qa-db-fra.com

Comment mettre à jour un cookie en PHP?

Si j'appelle setcookie() deux fois avec le même nom de cookie, j'obtiens deux cookies créés.

Comment mettez-vous à jour un cookie existant?

23
Cookie

Vous ne pouvez pas mettre à jour un cookie en soi, vous pouvez cependant l'écraser. Sinon, c'est ce que vous recherchez: http://php.net/manual/en/function.setcookie.php

Ça marche. Assurez-vous de lire "Pièges courants" à partir de cette page.

Vous pouvez utiliser le super global $_COOKIE['cookie_name'] également pour lire/écrire des cookies.

18
Francisc

Vous pouvez mettre à jour une valeur de cookie en utilisant la fonction setcookie (), mais vous devez ajouter '/' dans le 4ème argument qui est l'argument 'path', pour éviter de créer un autre cookie avec le même nom.

c'est-à-dire setcookie('cookie_name', 'cookie_value', $exp_date, '/');

26
Omar Alahmed

Ainsi, alors que PHP enverra deux en-têtes Set-Cookie: si cela est demandé, seul le dernier devrait persister dans les navigateurs.
La spécification de cookie Netscape http://curl.haxx.se/rfc/cookie_spec.html dit:

Les instances du même chemin et du même nom se remplaceront, la dernière instance étant prioritaire. Les instances du même chemin mais de noms différents ajouteront des mappages supplémentaires.

Cependant, il peut être conseillé d'éviter de telles conditions Edge. Restructurez votre application afin qu'elle n'ait pas besoin de remplacer le cookie déjà envoyé.

4
mario

Assurez-vous qu'il n'y a pas de echo avant l'appel de setcookie. setcookie communique avec le navigateur via l'en-tête, et si vous avez appelé echo plus tôt, l'en-tête + corps est déjà envoyé et le serveur ne peut plus envoyer setcookie au navigateur via l'en-tête. C'est pourquoi vous pourriez voir que cela ne fonctionne pas.

Il devrait y avoir une ligne comme ci-dessous dans l'avertissement de rapport du fichier journal du serveur php dans ce cas:

DEFAULT: PHP Warning:  Cannot modify header information - headers already sent by (output started at /path/to/your/script.php:YY) in /path/to/your/script.php on line XX
0
lashgar