$_COOKIE qui ne fonctionne pas

Eléphanteau du PHP | 42 Messages

01 mars 2016, 20:09

J'ai quelques lignes de code qui fonctionnent en easyphp:
// LECTURE COOCKIE
// on teste la déclaration de notre cookie
if (isset($_COOKIE['cookie_email'])) {
$email=$_COOKIE['cookie_email'];
}
else {
echo 'vous devez accepter les cookies';
exit;
}

Mais en production, il m'envoie le message 'vous devez accepter les cookies'
Pourquoi ?

Mammouth du PHP | 2703 Messages

01 mars 2016, 20:30

une raison peut être que le cookie n'a pas été créé auparavant.

Eléphanteau du PHP | 42 Messages

01 mars 2016, 20:49

une raison peut être que le cookie n'a pas été créé auparavant.
si, il a été créé : setcookie ("coockie_email", $email);

C'est l'auteur qui a créé ce message

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

01 mars 2016, 20:56

Bonjour,
setcookie ("coockie_email", $email);
Il y a une faute de frappe dans le nom du cookie.

Si cela ne résout toujours pas ton problème, repars d'une page blanche et ne met dedans que ta fonction de création de cookie puis de lecture et fait ton debug comme cela.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

02 mars 2016, 15:08

J'ai retrouvé mon inscription : Gros Blaise est en fait Blaise032.

J'ai corrigé les fautes et ça ne fonctionne toujours pas.
Repartir d'une page blanche m'est difficile parce que ce n'est pas mon code ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2016, 15:50

Bonjour,

Deux choses importantes sur les cookies avec php, la première est qu'un cookie ne peut pas être utilisé immédiatement. L'utilisateur doit changer de page ou recharger la page afin que le cookie qui vient d'être créé puisse être détecté et lu.
L'autre point est que chez certains hébergeurs, les paramètres facultatifs de la fonction setCookie sont nécessaire. Essayes en spécifiant une date d'expiration, un chemin et un domaine lors de l'appel à la fonction setCookie

http://php.net/manual/fr/function.setcookie.php
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 42 Messages

02 mars 2016, 17:02

C'est ce que je fais déjà avec setcookie ('coockie_email', $email, time()+240);

Eléphanteau du PHP | 42 Messages

04 mars 2016, 12:00

Voilà, j'ai créé une page
<?php
$value = 'Valeur de test';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+240);  /* expire dans 240 secondes */
setcookie("TestCookie", $value, time()+240, "/inscription/", "tournairefuge.be", 1);
?>
et une autre de lecture
<?php
// Afficher un cookie
echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];

// Une autre méthode pour afficher tous les cookies
print_r($_COOKIE);
?>
Tout ce que j'ai comme résultat est « Array ( [PHPSESSID] => egetv324cen15a24to80ovnff7 ) »

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

04 mars 2016, 16:18

Ça fonctionne chez moi :
cookie_ecriture.php
<?php
if (setcookie("TestCookie", "Valeur de test")) echo "Cookie envoyé au navigateur du visiteur !<hr />";
?>
<a href="cookie_lecture.php">Voir la valeur des cookies</a>
cookie_lecture.php
<?php
// Afficher un cookie
echo $_COOKIE["TestCookie"];
var_dump($_COOKIE);
Si ça ne fonctionne pas chez toi :
1) vérifie que tu n'as pas un anti-pub ou un antivirus trop chatouilleux
2) essaye avec un autre navigateur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

04 mars 2016, 18:40

Désactivé adblock, l'anti-virus, essayé avec un autre navigateur et d'autre utilisateurs et ça bloque toujours.
Maintenant, c'est un site utilisant WordPress. Ça gène ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

04 mars 2016, 19:41

Tu as créé les 2 pages PHP avec les mêmes noms et contenus que je t'ai indiqué et ça ne marche pas ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

05 mars 2016, 08:59

Bonjour,
Je reformule une question mal posée
J'ai essayé touts les cas de figure, y compris spécifier durée de vie, répertoire et domaine:

Code : Tout sélectionner

<?php $value = 'Valeur de test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+240); /* expire dans 240 secondes */ setcookie("TestCookie", $value, time()+240, "/inscription/", "tournairefuge.be", 1); ?>
et une page de lecture

Code : Tout sélectionner

<?php // Afficher un cookie echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // Une autre méthode pour afficher tous les cookies print_r($_COOKIE); ?>
Tout ce que j'ai comme résultat est

Code : Tout sélectionner

Array ( [PHPSESSID] => egetv324cen15a24to80ovnff7 )
J'ai mis en œuvre la solution apportée par @rthur

Code : Tout sélectionner

<?php if (setcookie("TestCookie", "Valeur de test")) echo "Cookie envoyé au navigateur du visiteur !<hr />"; ?> <a href="cookie_lecture.php">Voir la valeur des cookies</a>
et

Code : Tout sélectionner

<?php // Afficher un cookie echo $_COOKIE["TestCookie"];
J'ai changé de navigateur, coupé adblok et mon antivirus et demandé à un autre utilisateur. Vous pouvez d'ailleurs essayer : http://tournairefuge.be/inscription/test
C'est un site tournant sur WordPress.

Merci
Modifié en dernier par Blaise032 le 05 mars 2016, 10:13, modifié 2 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

05 mars 2016, 09:58

Tu peux nous donner exactement le code de ta page index.php, directement copié-collé sans rien changer ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

05 mars 2016, 11:23

Code : Tout sélectionner

<?php if (setcookie("TestCookie", "Valeur de test")) echo "Cookie envoyé au navigateur du visiteur !<hr />"; ?> <a href="cookie_lecture.php">Voir la valeur des cookies</a>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

05 mars 2016, 11:58

Je vois 2 possibilités :
- soit la fonction setcookie() est désactivée sur ton serveur (un phpinfo() devrait pouvoir te le dire)
- soit ton éditeur de code ou ton logiciel FTP est pourri et rajoute des caractères bizarres avant <?php qui bloque la pose du cookie...

Dans les 2 cas, regarde d'abord dans les logs PHP pour voir si il n'y aurait pas un message d'erreur.
Si tu es sur un hébergement mutualisé, demande à ton hébergeur où sont les logs (en général ils sont dans ton espace FTP, ou sinon dans ton espace client)
Si tu es sur un serveur virtuel ou dédié, fais un phpinfo() pour voir où ils sont
Quand tout le reste a échoué, lisez le mode d'emploi...