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?
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.
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, '/');
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é.
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