Maison >développement back-end >tutoriel php >Pourquoi ma valeur de cookie est-elle manquante après avoir utilisé « setcookie() » en PHP ?

Pourquoi ma valeur de cookie est-elle manquante après avoir utilisé « setcookie() » en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 11:12:12824parcourir

Why is My Cookie Value Missing After Using `setcookie()` in PHP?

Comprendre l'accessibilité des cookies

Problème : absence inattendue de la valeur du cookie après setcookie()

En PHP, utiliser $_COOKIE pour récupérer la valeur d'un un cookie nouvellement créé immédiatement après l'appel de setcookie() peut entraîner l'indisponibilité de la valeur souhaitée. Ce phénomène découle de la nature asynchrone de la gestion des cookies HTTP.

Une histoire du temps : interactions client et serveur

Lorsque setcookie() est invoqué, le script PHP émet une commande pour créer un cookie et incluez-le dans la réponse HTTP sortante. Cependant, la réponse n'est pas envoyée au client (c'est-à-dire au navigateur) tant que le script n'a pas terminé son exécution.

Comme la variable $_COOKIE reflète les cookies inclus dans la requête HTTP actuelle, toute modification apportée aux cookies pendant l'exécution du script côté serveur ne sont pas immédiatement disponibles dans $_COOKIE.

Chronologie de disponibilité des cookies

Pour illustrer le timeline :

  1. setcookie() est appelé.
  2. L'exécution du script continue et modifie la variable $_COOKIE.
  3. Une fois l'exécution du script terminée, la réponse HTTP complète, y compris le cookie nouvellement créé, est envoyé au client.
  4. Côté client, le nouveau cookie est défini, mais le navigateur ne renvoie pas ce cookie à le serveur jusqu'à la prochaine requête HTTP.
  5. Dans les exécutions ultérieures du script, la variable $_COOKIE contiendra la valeur du cookie nouvellement créé.

Résolution du problème

Pour garantir que $_COOKIE reflète la valeur du cookie nouvellement définie, vous pouvez la remplacer dans le même script :

setcookie('uname', $uname, time() + 60 * 30);
$_COOKIE['uname'] = $uname;

Cette action crée le cookie dans la réponse HTTP sortante et définit immédiatement sa valeur dans la variable $_COOKIE, le rendant accessible pour une utilisation dans l'exécution du script en cours.

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