web-dev-qa-db-fra.com

Vérifiez si un PHP cookie existe et si sa valeur n'est pas définie

Je travaille sur un site multilingue et j'ai donc essayé cette approche:

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];

L'idée est que si le client ne possède pas de cookie lg (c'est donc la première fois qu'il visite ce site), il crée un cookie lg = ro pour cet utilisateur.

Tout fonctionne bien sauf que si j'entre dans cette page pour la première fois, les première et deuxième echo ne renvoient rien. Seulement si j'actualise la page, le cookie est défini, puis les deux echo impriment la chaîne "ro" que j'attends.

Comment définir ce cookie afin de voir sa valeur à partir de la deuxième echo lors de la première visite/du chargement de la page de l'utilisateur? Devrait être sans avoir besoin d'actualiser la page ou de créer une redirection.

30
Teodor

Répondre

Vous ne pouvez pas selon le manuel PHP :

Une fois les cookies configurés, vous pourrez y accéder lors du prochain chargement de page avec les tableaux $ _COOKIE ou $ HTTP_COOKIE_VARS.

En effet, les cookies sont envoyés dans les en-têtes de réponse au navigateur, qui doit ensuite les renvoyer avec la demande suivante. C'est pourquoi ils ne sont disponibles que lors du chargement de la deuxième page.

Solution de contournement

Mais vous pouvez contourner ce problème en définissant également $_COOKIE Lorsque vous appelez setcookie():

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
78
Treffynnon

Les cookies sont seulement envoyés au moment de la demande et ne peuvent donc pas être récupérés dès qu'ils ont été attribués (uniquement disponibles après le rechargement).

Une fois que les cookies ont été configurés, ils peuvent être consultés lors du chargement de la page suivante avec les tableaux $ _COOKIE ou $ HTTP_COOKIE_VARS.

Si la sortie existe avant d'appeler cette fonction, setcookie () échouera et retournera FALSE. Si setcookie () s'exécute avec succès, il retournera VRAI. Ceci fait pas indique si l'utilisateur a accepté le cookie.

Les cookies ne deviendront visibles qu'au prochain chargement d'une page pour laquelle le cookie sera visible. Pour vérifier si un cookie a été défini avec succès, recherchez le cookie sur une page de chargement suivante avant son expiration. Le délai d'expiration est défini via le paramètre Expire. Un bon moyen de corriger l'existence de cookies consiste simplement à appeler print_r ($ _ COOKIE) ;.

Source

10
0b10011