Cookie

[Résolu]
Signaler
Messages postés
10
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
22 mars 2009
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour à tous ! J'ai un petit problème concernant une création de
cookie : j'utilise la fonction PHP include pour insérer ce bout de code
en début de chaque page de mon site :

<?php
if (isset($_COOKIE['connecte']))
{
$moment=time()+5*60;
setcookie('connecte','oui',$moment);
}
else
{
(...)
$moment=time()+5*60;
setcookie('connecte','oui',$moment);
(...)
}
?>

J'ai retiré les appels SQL, mais j'ai testé sans et ils ne posent aucun
pb. Mais le cookie ne veut pas se créer ! Je précise que, sous WAMP, ça
marche, sur le compte Free de mon frère, ça marche ; mais pas sous le
mien. Au passage, le script passe bien sur les setcookie, j'ai posé des
echos qui en témoignent.
La seule chose que j'ai envisagé, c'est le fait que mon compte possède
un point dans l'URL, au lieu d'un tiret ou d'un underscore :
david.grimarne.free.fr ; mais dans ce cas, pourquoi est-ce que le second
cookie du site passe correctement ?

16 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Ben là c'est logique, ton print_r est placé dans la même page.
D'ailleurs, tu n'es pas en error_reporting(E_ALL) sauf erreur de ma part...
Teste dans de bonnes conditions : efface tous tes cookies, place ton print_r() sur une page suivant la page où tu crées ton cookie. Je suis certain que cela va fonctionner. Je pense que tu as voulu les voir trop vite :
tu fais ton premier. Le cookie est créé, et tu tentes de l'afficher dans la même page. Rien. Normal. Puis tu fais un deuxième cookie ailleurs. Ta variable est déjà ($_COOKIE) et tu dois te'n servir plus loins et ça fonctionne. Je suis presque sûr que si tu fais ton print_r() sur une autre page, tu auras ton 1er cookie.
Je remonterai le pb du mail.
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Salut,

Essaye $HTTP_COOKIE_VARS['connecte'] au lieu de $_COOKIE['connecte']
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Je me permet d'intervenir du fait que je connais le problème (c'est moi le frère lol).
Même dans le cas ou ce serait un problème avec $_COOKIE qui ne marcherait pas bien, l'un des deux set_cookie est automatiquement effectué (et d'ailleurs renvoi TRUE pour information, le test a été effectué), mais malgrès le renvoi de "pas d'erreur", le cookie n'est pas créé. Sachant que en changeant de domaine, ca passe, je ne pense pas que le problème soit lié au naviguateur.

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
en fait, vous dites que le premier setcookie n'est pas executé alors que le deuxieme si ?

Si c'est le cas, cela veut dire que php entre dans le "else" de la condition.
Non ?

Pour DMK04 : $HTTP_COOKIE_VARS, et aussi utiliser php 2 ? ;)
Ca fait tres tres longtemps que $HTTP_COOKIE_VARS n'est plus utilisé ! Mieux vaut garder $_COOKIE

Autre possibilité : Le cookie ne s'applique qu'au domaine ou il est crée. Si vous créez un cookie dans www.site.fr/rep1/cookie.php et que vous tentez de le lire sur www.site.fr/readcookie.php, ca ne marchera pas, car le cookie sera appliqué que sur le domaine rep1/.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
pourquoi il me prends pas les saut de ligne celui-la ?!!
Messages postés
10
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
22 mars 2009

Désolé, je me suis mal exprimé : en fait, quand je parlais de second cookie, je faisais référence à un autre cookie sur mon site, qui lui, marche correctement. La fonction que je vous ai indiqué ne touche qu'à un seul et même cookie : le cookie "connecte". C'est donc bel et bien un pb au niveau de la fonction setcookie : elle a beau dire qu'elle arrive à créer, elle ne le fait pas pour autant !
En ce qui concerne le domaine où le cookie est créé, le pb ne vient pas de là. On a fait attention à ça en faisant les différents tests.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
et si tu le met hors de ta condition ca fait quoi ? genre tu met QUE le setcookie (voir si c'est pas kkchose qui viendrait foutre la merde avant)
Messages postés
10
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
22 mars 2009

Non, c'est l'instruction setcookie qui foire. Ca, on en est sûrs ! Les tests nous l'ont montré (on a notamment placé des echos dans le if et le else, pour voir les réactions dans le code HTML).
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

tu travailles en error_reporting(E_ALL);?
Et quand tu testes, teste bien ton bin's:

if (false === setcookie('connecte', 'oui', $moment)) {
    throw new Exception('Création échouée');
}
Et siu tu n'entres pas là-dedans, alors fais, à la fin de ton if .... else :
print_r($_COOKIE);
Tu auras plus de visibilité sur ce qu'il se passe.
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Sachant encore une fois que elle ne foire que sur ce cookie là (d'autant moins compréhensible)

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

En fait, a priori (faudrait effectivement essayer) le throw new Exception ne devrait pas réagir du fait que le setcookie (testé ca par contre) renvoie bien TRUE (mais le cookie ne se créé par pour autant) !

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Justement.
Ca ne vient donc pas de setcookie() mais d'un truc qui l'emmerde sur ton code. D'où l'importance de tester ça le plus correctement possible : error_reporting à E_ALL pour que TOUTES les erreurs s'affichent, et un test réel sur la fonction avec false === setcookie(...) pour être sûr de ce qu'elle renvoie.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Dis, le cookie, tu essayes d'y accéder sur une autre page ou après raffraichissement de ta page hein ? :-) Le print_r tu le fais APRES hein, après raffraichissement ou sur la page suivante.
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Alors dans ce cas, l'explication sachant que ca marche sur mon propre FTP free (ils sont tous deux configurés de la même manière a moins que la config par défaut de free ai changé...) Mais on va vérifier quand même !

Au passage, vu que t'es admin ! J'ai demandé a ne pas etre averti par mail mais je le suis quand même !

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />
Messages postés
10
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
22 mars 2009

malalam, j'ai testé le code suivant :

if (setcookie('connecte','oui',$moment))
  {
   echo 'AAAAAAA';
   print_r($_COOKIE['connecte']);
   echo 'BBBBB';
  }

Il a renvoyé "AAAAAAABBBBB".

En local également. Donc, c'est peut-être normal. Par contre, le throw exception ne marche pas, parce que free est en PHP 4 (sauf erreur).
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Pour précision tout de même, après test en local chez moi, le print_r renvoi effectivement une valeur après rafraichissement de la page (en fait logique puisque le naviguateur n'as pu déjà le créer, étant dans la phase de l'évaluation du programme php par le serveur).

Et d'ailleurs, le test sur le serveur de Free cité ci-dessus a été fait dans de mauvaises conditions puisque le print_r est placé (si je ne m'abuse, a revérifier) dans la partie sous la condition "pas encore de cookie" !

<hr size="2" width="100%" />  Qui ne tente rien...

  Ne risque pas d'avoir grand chose !!!

<hr siz="" />