Le cookie n'est pas créé
Résolu
jacky0546
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai fait un script PHP très simple pour créér un cookie, mais la création ne se fait pas. J'ai fouillé partout (ou presque) sur internet, je n'ai pas trouvé le pb, mais mon scripte semble correct (sauf erreur qui me crève les yeux). Ce script permet à un visiteur d'accpeter les termes de confidentialité de mon site et de mémoriser sa réponse pour ses prochaines visites. Les commentaires // ????? indiquent un contrôle en cours de déroulement du script, ils ne feront pas partie du fichier définitif. Le client Internet accepte bien sûr les cookies. Voici le script en question (Je ne sais pas comment faire une présentation style notepadd++, si vous pouviez m'informer également la-dessus)
Je vous remercie par avance.
Bien cordialement,
Jacky
J'ai fait un script PHP très simple pour créér un cookie, mais la création ne se fait pas. J'ai fouillé partout (ou presque) sur internet, je n'ai pas trouvé le pb, mais mon scripte semble correct (sauf erreur qui me crève les yeux). Ce script permet à un visiteur d'accpeter les termes de confidentialité de mon site et de mémoriser sa réponse pour ses prochaines visites. Les commentaires // ????? indiquent un contrôle en cours de déroulement du script, ils ne feront pas partie du fichier définitif. Le client Internet accepte bien sûr les cookies. Voici le script en question (Je ne sais pas comment faire une présentation style notepadd++, si vous pouviez m'informer également la-dessus)
Je vous remercie par avance.
Bien cordialement,
Jacky
<!-- Date de création: 23/06/2018 --> <?php // cookie mémorisant l'acceptation de la politique de confidentialité If (isset($_POST['conf'])) { echo 'on positionne le cookie editionskywiconf <br>'; // ????? $temps = 183*24*3600; // durée de 6 mois setcookie ("editionskywiconf",$_POST['conf'], time() + $temps); // on envoie un cookie de nom editionskywiconf }; // vérif des cookies echo 'variable conf = '.$_POST['conf'].'<br>'; // ????? echo 'cookie editionskywiconf = '.$_COOKIE['editionskywiconf'].'<br>'; // ????? // utilisation des variables globales session_start(); // positionnement du type de la police header( 'content-type: text/html; charset=utf-8' ); ?> <!DOCTYPE html> <head> <title>acceptation</title> <link rel="stylesheet" type="text/css" href="./jackylebrun.css"> </head> <BODY id="fondpage"> <!--Aceptation de la politique de confidentialité --> <?php if ($_COOKIE['editionskywiconf'] != 'oui') // le client n'a pas encore accepté la politique de confidentialité { echo '<form METHOD="POST" action="./acceptation.php"> <font class="grande">Vous devez accepter notre politique de confidentialité sur vos données personnelles.<br> Lisez ce qui suit puis cliquez sur le bouton "j\'accepte" (cette acceptation restera valide pendant 6 mois)<br><br> bla bla bla<br><br> <input type="hidden" name="conf" value="oui"> <input type="submit" name="accepte" value=" J\'ACCEPTE " onclick="soumettre"> </form> </font>'; } else { echo '<font class="grande">Corps de la page après acceptation</font>'; }; ?> </body> </html>
A voir également:
- Le cookie n'est pas créé
- Cree un compte google - Guide
- Cree gmail - Guide
- Comment cree un groupe sur whatsapp - Guide
- Supprimer cookie - Guide
- Comment créé un compte paypal - Guide
3 réponses
Bonjour
Dans le protocole HTTP, il y a l'envoi des en-têtes PUIS celui des données.
set_cookie(), session_start() et header() utilisent les en-têtes http.
Si tu envoies quoi que ce soit avant (echo, tout code html y compris le commentaire
Pour utiliser la coloration syntaxique ("style notepad++"), sélectionne le texte à colorier puis utilise la petite flèche à droite du bouton <> en haut de la fenêtre qui sert à rédiger la réponse. Cette flèche permet de choisir le langage de programmation utilisé.
Dans le protocole HTTP, il y a l'envoi des en-têtes PUIS celui des données.
set_cookie(), session_start() et header() utilisent les en-têtes http.
Si tu envoies quoi que ce soit avant (echo, tout code html y compris le commentaire
<!-- Date de création: 23/06/2018 -->) la phase en-tête est terminée et les fonctions set_cookie(), session_start() et header() ne marchent plus.
Pour utiliser la coloration syntaxique ("style notepad++"), sélectionne le texte à colorier puis utilise la petite flèche à droite du bouton <> en haut de la fenêtre qui sert à rédiger la réponse. Cette flèche permet de choisir le langage de programmation utilisé.
Tout d'abord, tu devrais vérifier (avec isset) l'existence de
Ceci dit et à part ce message d'erreur, ton script marche chez moi. MAIS peut-être pas comme tu t'y attendrais.
Je ne vois l'acceptation qu'au troisième affichage de la page, c'est à dire après avoir cliqué DEUX fois sur "J'accepte".
En effet, la première fois qu'on clique sur le bouton, le cookie est bien créé mais ton test
Bien sûr, si on rouvre ensuite la page (sans attendre six mois) on a bien le message d'acceptation.
J'ai fait l'essai avec Chrome et FF, le comportement est le même.
Si ça persiste à ne pas marcher, c'est peut-être que tu as un caractère invisible AVANT
$_COOKIE['editionskywiconf']car ton code génère une erreur
Notice: Undefined index: editionskywiconf in ...Si tu ne vois pas ce message, c'est que ta configuration n'affiche pas les erreurs. C'est très bien en production, mais c'est dommage en mise au point.
Ceci dit et à part ce message d'erreur, ton script marche chez moi. MAIS peut-être pas comme tu t'y attendrais.
Je ne vois l'acceptation qu'au troisième affichage de la page, c'est à dire après avoir cliqué DEUX fois sur "J'accepte".
En effet, la première fois qu'on clique sur le bouton, le cookie est bien créé mais ton test
if ($_COOKIE['editionskywiconf']...ne le montre pas car la variables $_COOKIE ne contient que les cookies qui existaient lors de l'ouverture de la page, pas ceux qui ont été créés depuis. Il faut donc cliquer une fois de plus pour en voir l'effet avec ce test-ci.
Bien sûr, si on rouvre ensuite la page (sans attendre six mois) on a bien le message d'acceptation.
J'ai fait l'essai avec Chrome et FF, le comportement est le même.
Si ça persiste à ne pas marcher, c'est peut-être que tu as un caractère invisible AVANT
<?php. As-tu bien enregistré ton fichier SANS BOM ?
Grand merci Le Père !
- Le bog se tenait effectivement dans l'enregistrement du fichier qui était avec BOM. Comme je ne sais pas ce que cela signifie, je n'y ai pas prêté attention.
- Le "isset" sur le test du cookie ne fonctionne pas. J'ai le message d'erreur suivant :
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /homepages/2/d385103479/htdocs/jackylebrun/editions-kywi/acceptation.php on line 20
du coup, je n'y touche pas.
- Quant au fait de devoir retaper deux fois "j'accepte", j'ai trouvé une solution :
Dans le "<head>", je teste l'existence de $_POST['conf'], si vrai, c'est que je viens de créer le cookie, alors je met un "<meta>" qui recharge la page.
Voici le scripte qui marche :
- Le bog se tenait effectivement dans l'enregistrement du fichier qui était avec BOM. Comme je ne sais pas ce que cela signifie, je n'y ai pas prêté attention.
- Le "isset" sur le test du cookie ne fonctionne pas. J'ai le message d'erreur suivant :
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /homepages/2/d385103479/htdocs/jackylebrun/editions-kywi/acceptation.php on line 20
du coup, je n'y touche pas.
- Quant au fait de devoir retaper deux fois "j'accepte", j'ai trouvé une solution :
Dans le "<head>", je teste l'existence de $_POST['conf'], si vrai, c'est que je viens de créer le cookie, alors je met un "<meta>" qui recharge la page.
Voici le scripte qui marche :
<?php If (isset($_POST['conf'])) { $temps = 183*24*3600; setcookie ("editionskywiconf","oui", time() + $temps); }; session_start(); header( 'content-type: text/html; charset=utf-8' ); ?> <!DOCTYPE html> <head> <?php If (isset($_POST['conf'])) { echo '<meta HTTP-EQUIV="Refresh" content="0;URL=./acceptation.php">'; }; ?> <title>acceptation</title> <link rel="stylesheet" type="text/css" href="./jackylebrun.css"> </head> <BODY id="fondpage"> <!--Aceptation de la politique de confidentialité --> <?php if (($_COOKIE['editionskywiconf'] != "oui")) // le client n'a pas encore accepté la politique de confidentialité { echo 'editionskywiconf = '.$_COOKIE['editionskywiconf']; // ????? echo '<form METHOD="POST" action="./acceptation.php"> <font class="grande">Vous devez accepter notre politique de confidentialité sur vos données personnelles.<br> Lisez ce qui suit puis cliquez sur le bouton "j\'accepte" (cette acceptation restera valide pendant 6 mois)<br><br> bla bla bla<br><br> <input type="hidden" name="conf" value="oui"> <input type="submit" name="accepte" value=" J\'ACCEPTE " onclick="soumettre"> </form> </font>'; } else { echo 'editionskywiconf = '.$_COOKIE['editionskywiconf']; // ????? echo '<font class="grande">Corps de la page après acceptation</font>'; }; ?> </body> </html>
Tant mieux si ça marche :-)
Le BOM (Byte Order Mark) est un caractère invisible souvent ajouté par les éditeurs de texte au début des fichiers UTF8. C'est une plaie pour les programmeurs PHP, heureusement facile à éviter (quand on le sait). Pour savoir à quoi il sert (car il a quand même une utilité) :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Quant à la fonction isset, avec le message d'erreur que tu donnes, c'est que visiblement tu t'en es mal servi. Elle teste si une variable existe, il faut donc lui donner une variable à tester. Et toi tu lui avais donné une expression.
Le BOM (Byte Order Mark) est un caractère invisible souvent ajouté par les éditeurs de texte au début des fichiers UTF8. C'est une plaie pour les programmeurs PHP, heureusement facile à éviter (quand on le sait). Pour savoir à quoi il sert (car il a quand même une utilité) :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Quant à la fonction isset, avec le message d'erreur que tu donnes, c'est que visiblement tu t'en es mal servi. Elle teste si une variable existe, il faut donc lui donner une variable à tester. Et toi tu lui avais donné une expression.
Bonjour,
Complètement d'accord avec le père.
Du coup une solution simple à ton problème serait de modifier ton if en rajoutant le test sur POST['conf'] :
Xavier
Complètement d'accord avec le père.
Du coup une solution simple à ton problème serait de modifier ton if en rajoutant le test sur POST['conf'] :
if ($_COOKIE['editionskywiconf'] != "oui" && (!isset($_POST['conf']) || $_POST['conf'] != 'oui'))
Xavier
Bonjour Reivax962,
J'avais déjà essayé cette solution qui effectivement fonctionne mais seulement la première fois. Si je quitte le site puis reviens dessus, je retrouve la demande car
Merci d'avoir tenté de m'aider, mais je pense que LePère doit toucher du doigt la solution, je vais vite voir de ce côté là.
Bien cordialement,
Jacky.
J'avais déjà essayé cette solution qui effectivement fonctionne mais seulement la première fois. Si je quitte le site puis reviens dessus, je retrouve la demande car
$_POST['conf']n'existe plus, de la même manière que lorsque je quitte la page puis reviens dessus.
Merci d'avoir tenté de m'aider, mais je pense que LePère doit toucher du doigt la solution, je vais vite voir de ce côté là.
Bien cordialement,
Jacky.
D'abord merci pour ta réponse.J'ai supprimé tous les commentaires (on ne sais jamais) comme tu peux le voir dans mon nouveau texte ci-dessous, mais ça ne marche toujours pas. Le test à la ligne 20 renvoi systématiquement à la proposition ligne 21 et je ne vois pas le cookie dans ma liste (j'utilise FireFox : Options/Vie privée et sécurité/Cookies et données de site/Gérer les données...) Je suis vraiment désolé d'être complètement sec devant ce problème, surtout que le bog doit être gros comme une maison.
Bien cordialement,
Jacky.