IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

setter un cookie


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut setter un cookie
    Bonsoir,

    je souhaite "setter" un cookie ; je fais un truc tout bête, mais ça ne "sette" pas le cookie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    session_start();
    setcookie("connecte","1",time()+3214080000); 
    echo 'cookie='.$_COOKIE["connecte"].'<br>';
    ?>
    rien dans le cookie ; pourquoi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Pour être sûr qu'il n'y ait pas d'effet de bord, j'ai créé un fichier qui ne fait que ça, et toujours pas de cookie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
    session_start();
    $var="1";
    echo 'var='.$var.'<br>'; 
    setcookie("login",$var,time()+3214080000);
    echo 'cookie='.$_COOKIE["login"].'<br>';
    ?>
    Et de plus, j'ai vérifié ; les cookies ne sont pas bloqués. Alors ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Extrait du manuel php :
    Les cookies font partie des en-têtes HTTP, ce qui impose que setcookie() soit appelée avant tout affichage de texte. Ce sont les mêmes limitations que pour header()

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Je le savais et me suis fait avoir, mais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
    session_start();
    $var="1";
    setcookie("login",$var,time()+3214080000);
    echo 'var='.$var.'<br>'; 
    echo 'cookie='.$_COOKIE["login"].'<br>';
    ?>
    c'est pareil...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ton temps n'est pas bon la

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Ah bon ? C'est juste du copier-coller et ailleurs ça marche ; pour voir, j'ai réduis la valeur (time()+3000), mais ça ne change rien...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    de tout façon le cookie est lu en debut de script, donc tu ne peux pas faire un setcookie et le lire juste apres, ca marchera la 2eme fois que tu lit la page, et n'oublie pas de toujours développé avec le niveau d'erreur maximum

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Oui, en effet ; pour que la valeur du cookie soit affichée, je fais un refresh et c'est bon, mais qu'entends-tu par niveau d'erreur maximum ? Ca se règle avec un ini_set ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Oui, en effet ; pour que la valeur du cookie soit affichée, je fais un refresh et c'est bon, mais qu'entends-tu par niveau d'erreur maximum ? Ca se règle avec un ini_set ?
    ton display_errors sur On
    ton error_reporting sur E_ALL | E_STRICT (ou -1)
    ton output_buffering sur Off

    soit en ini_set, si tu dev en local change direct les valeurs dans ton php.ini

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Je ne développe pas en local car, je ne sais pas pourquoi, depuis plusieurs années, Wampserver ne marche plus. Mais j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('display_errors', 'on');
    ini_set('error_reporting', 'E_ALL | E_STRICT');
    ini_set('output_buffering', 'off');
    et ça a l'air d'aller. Par contre, il ne s'agissait évidemment que d'un essai ; en fait, je voudrais l'utiliser dans une gestion de connexion : si l'utilisateur se connecte, je "sette" le cookie ; comme ça, à son prochain passage sur le site, il sera connecté (s'il a autorisé les cookies), mais ça ne marche pas comme je voudrais : sur la page de connexion, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    session_start();
    setcookie("connecte","1",time()+60*60*24*365); 
    ?>
    et sur une page où l'on veut savoir si l'on est connecté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    session_start();
    $exit=0;
    if ( $_COOKIE["connecte"]!='1')  {  $exit=1; }
    echo 'cookie='.$_COOKIE["connecte"].'<br>';
    ?>
    mais même si on vient de se connecter, sur la 2e page, on ne l'est pas : pourquoi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    en ini_set c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('error_reporting', E_ALL | E_STRICT);
    // pas de quotes
    pour ton wamp je te conseil de désinstaller tout, bine vérifier le port de ton IIS si tu t'en sert, installer les vrai package, apache sur apache.org, php sur php.net, mysql dur mysql.org

    pour ton cookie faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_COOKIE["connecte"]!='1'
    va te lancer une erreur si le cookie n'existe pas, d'ou bien activé la gestion des erreurs et de travailler en local pour gagner du temps

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Au départ, j'ai essayé sans les quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
    ini_set('display_errors', on);
    ini_set('error_reporting', E_ALL | E_STRICT);
    ini_set('output_buffering', off);
    session_start();
    $var="6";
    setcookie("login",$var,time()+3000);
    ...
    mais ça génère plein de warnings :
    Notice: Use of undefined constant off - assumed 'off' in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 4

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/18/d246623212/htdocs/testcookie/testcookie.php:4) in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 5

    Warning: Cannot modify header information - headers already sent by (output started at /homepages/18/d246623212/htdocs/testcookie/testcookie.php:4) in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 7
    Pour Wampserver, je ne suis pas très motivé à essayer de le refaire marcher car à une époque j'avais chercher de l'aide sur leur forum et échec.

    Et pour l'existence du cookie, est-ce que ça n'irait pas de conditionner le test que j'effectue par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset($_COOKIE["connecte"])
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    je parlais juste pour le error_reporting pas pour tout les valeurs

  14. #14
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Citation Envoyé par laurentSc
    Et pour l'existence du cookie, est-ce que ça n'irait pas de conditionner le test que j'effectue par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset($_COOKIE["connecte"])
    Oui, il faut vérifier l'existence de la variable pour déterminer sa valeur.

    Tu peux faire comme ça...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $connecte=(isset($_COOKIE['connecte'])&& $_COOKIE['connecte']==='1')?true:false;
    if($connecte)
    	echo "Vous êtes déjà connecté<br>";
    else
    	echo "Vous n'êtes pas connecté<br>";
    ?>

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Merci mais pour savoir si le cookie existe, j'ai fait un peu différemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
    if (isset($_COOKIE["connecte"]))
        if ($_COOKIE["connecte"]=='1') $exit=0; 
        else $exit=1;	
     
    else $exit=2;
    echo 'cookie='.$_COOKIE["connecte"].'<br>';
    echo 'exit='.$exit.'<br>';
    ?>
    et comme $exit vaut 2, c'est que le cookie n'existe pas. Pourtant, lors de la connexion, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    session_start();
    setcookie("connecte","1",time()+60*60*24*365); 
    ?>
    donc je ne comprends pas : avez-vous une idée ? Et d'autre part, à chaque fois que je dois gérer des cookies, je commence par un session_start() : est-ce nécessaire ?

    Et sinon, OK pour ça :
    je parlais juste pour le error_reporting pas pour tout les valeurs
    Ca ve effectivement mieux ; mais d'ailleurs, ça apporte quoi ce niveau d'erreur maximum ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  16. #16
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Quand tu te connectes sur un site en général :

    - La page login.php pose le cookie et ensuite, nous redirige vers la page où on a cliqué sur connexion.
    - Cette page vérifie la présence et la valeur du cookie pour savoir si nous sommes connectés ou non.


    Toi, tu veux que ta page permettant de poser le cookie, gère aussitôt sa valeur. Ce qui est impossible !

    Il faut bien comprendre que le cookie est créé une fois la page servie, en effet, il se trouve bien dans l'entête de la page.

    La ligne $_COOKIE['connecte'] = '1' fait juste savoir à PHP qu'il devra ajouter un ligne dans l'entête du fichier.

    session_start(); n'est pas nécessaire si tu n'utilises pas le tableau $_SESSION.


    Le niveau d'erreur maximum est très intéressant pendant le développement. Il te permet de voir certains avertissements susceptibles de t'aider à mieux coder.

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Et sinon, OK pour ça : Ca ve effectivement mieux ; mais d'ailleurs, ça apporte quoi ce niveau d'erreur maximum ?

    Comment vas tu savoir tes erreurs si tu ne les affiches pas ?

  18. #18
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    Toi, tu veux que ta page permettant de poser le cookie, gère aussitôt sa valeur.
    Mais justement, non ! Car j'ai bien une page dédiée (action_connexion.php) où je "sette" le cookie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    setcookie("connecte","1",time()+60*60*24*365); 
    ?>
    et dans une autre page, je veux vérifier si je suis connecté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    if (isset($_COOKIE["connecte"]))
        if ($_COOKIE["connecte"]=='1') $exit=0; 
        else $exit=1;	
     
    else $exit=2;
    echo 'cookie='.$_COOKIE["connecte"].'<br>';
    echo 'exit='.$exit.'<br>';
    ?>
    Donc à priori, je fais comme tu dis (et ai viré les session_start() vu que je n'ai pas de session ici). Donc pourquoi ça ne marche pas ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fait des sinon dans firefox pour voir les cookie :
    clique droit dans la page -> information sur la page -> sécurité -> voir les cookies

  20. #20
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 335
    Points : 5 704
    Points
    5 704
    Billets dans le blog
    1
    Par défaut
    J'ai fait comme tu dis ; pour aller plus vite, j'ai regardé le site sous FF, regardé les cookies et mon cookie y était bien et pourtant, quand je fais le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_COOKIE["connecte"]))
    c'est négatif ; qu'est-ce que je peux faire ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. "setter" un cookie
    Par laurentSc dans le forum Langage
    Réponses: 4
    Dernier message: 22/04/2013, 10h39
  2. setter un cookie n'importe quand
    Par laurentSc dans le forum Langage
    Réponses: 5
    Dernier message: 06/03/2013, 00h59
  3. Les Cookies 4° ! : LA SOLUTION
    Par Ph. B. dans le forum XMLRAD
    Réponses: 2
    Dernier message: 31/01/2003, 17h46
  4. Les cookies 3° !!!
    Par Ph. B. dans le forum XMLRAD
    Réponses: 6
    Dernier message: 28/01/2003, 19h13
  5. [XMLRAD] Cookies pour login
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 9
    Dernier message: 23/12/2002, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo