Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1394 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Cookies, pb headers !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Cookies, pb headers !!

n°1117611
Profil sup​primé
Posté le 12-06-2005 à 21:21:31  answer
 

Salut,  
 
J'essaye de faire une identification pour mon site qui contient un forum.
J'ai une page indexe.php, qui contient la base générale de mon site (en-tete + cotés) et le tableau du milieu qui est une variable $page.
Une adresse serait par exple indexe.php?page=lire_cine.
 
J'ai donc une page identification dans laquelle j'ai la fameuse petite case "Se souvenir de moi" qui est censé envoyer un cookie.
J'ai mis la fonction cookie en top de ma page indexe.php.
Ca donne ca :
 

Code :
  1. <?  //1ere ligne d'indexe.php
  2. function send_cookie($nickname)
  3. {
  4. $expire = 365*24*3600;
  5. $cook = setcookie("pseudo","$nickname",time()+$expire);
  6. return($cook);
  7. }
  8. ?>
  9. <HTML>
  10. ......


 
Et apres j'ai la definition de mon entete et de ma barre de menus sur la gauche, puis j ai l'endroit ou j'appelle mon tableau du milieu comme variable :

Code :
  1. <!-- menu central -->
  2. <td align="center" valign="top" class="comic">
  3. <?php
  4.  if (empty($page))
  5.  {
  6.   include("default.php" );
  7.  }
  8.  else
  9.  {
  10.   $includ="$page.php";
  11.   include($includ);
  12.  }
  13. ?>
  14. </td>
  15. <!-- fin menu central -->


puis la page identification, d'où j'appelle la fonction cookie :

Code :
  1. if($souvenir == "on" )
  2.    {
  3.    $cook = send_cookie($surnom);
  4.    }
  5.    ?>
  6. <!-- menu central -->
  7. <table border="1" width="100%" class = "bordure" >
  8.    <tr><td align="center"><blink><font size="4">Votre identification s'est déroulée avec succés</font></blink><br><br>
  9.    <center><a href="indexe.php?page=identification" title="Index"><font color='white'                                      size='1'>Retour</font></a></center></td></tr>
  10. </table>
  11. <!-- fin menu central -->


 
Et quand je lance le tout, il me repond :
 
Warning: Cannot modify header information - headers already sent by (output started at /home/ioiolodi/www/indexe.php:11) in /home/ioiolodi/www/indexe.php on line 5
 
Je comprend pas  :cry:  
Qqun pourrait m'aider ?
 
Merci


Message édité par Profil supprimé le 12-06-2005 à 22:23:36
mood
Publicité
Posté le 12-06-2005 à 21:21:31  profilanswer
 

n°1117616
Normad
Ah! Vanilla-San
Posté le 12-06-2005 à 21:25:02  profilanswer
 

Les "headers" sont des informations envoyées en tout début de page, ayant pour but de n'être pas affichées et faisant partie des communications HTTP entre le navigateur et le serveur.
 
Par défaut, PHP fonctionne linéairement et avec peu de bufferisation: dès que tu lui dis d'afficher quelque chose il le place en sortie et l'envoie au navigateur.
 
Les headers devant impérativement être envoyés avant le début de la page (HTML), tenter d'accéder au header  en plein milieu de l'envoi de la page génère une erreur.
 
Solutions:
1- Coder proprement et faire bien attention à envoyer les headers avant le début du code HTML
2- Coder sâlement et utiliser la bufferisation de sortie (chercher ob_start, ob_flush et ob_end dans la doc PHP)


---------------
[Masklinn intérimaire Vediorbis] Kami-sama wa Ecchi ga dai-kirai desu!
n°1117618
Profil sup​primé
Posté le 12-06-2005 à 21:27:28  answer
 

Vi ca je comprend mais ou est ce que j'envoie les headers ?
La ou se trouve ma fonction ou la ou j'appelle al fonction ?
car la fonction est bien avant les headers puisque c'est la premiere ligne de code. Mais si c'est la ou j'appelle la fonction je ne vois pas comment faire ...
 
En fait j'ai lu pas mal de doc (nottament phopdebutant et nexen) à propos des headers, mais le truc c'est que je ne sais pas à quel moment je les envoi. C'est pour ca que j'ai mis la fonction send_cookie en premiere ligne de ma page principale.
 
Si j'appelle les headers à lendroit ou j'appelle la fonction (donc dans identification.php alors que faut-il faire ? Faut-il passer par une page intermediaire ayant pour unique but d'envoyer le cookie ?


Message édité par Profil supprimé le 12-06-2005 à 21:52:10
n°1117663
flo850
moi je
Posté le 12-06-2005 à 22:49:39  profilanswer
 

il faut que tu appelle ta fonction avant d'avoir envoyer le premier caractère au navigateur ( que ce soit avec une fonction echo / printf  ou que ce soit des caractères hors des <? ?> )
 


---------------

n°1117667
Profil sup​primé
Posté le 12-06-2005 à 22:52:30  answer
 

Ok
merci pour ta réponse
Donc dans mon cas, vu que j'utilise tout le temps ma page indexe.php, la seule solution est-elle de passer par une page completement blanche envoyant le cookie et redirigant apres ?


Message édité par Profil supprimé le 12-06-2005 à 22:52:59
n°1117670
flo850
moi je
Posté le 12-06-2005 à 22:55:56  profilanswer
 

pas forcement  
tu envoi tes cookies avant index, avec qq chose du genre  

Code :
  1. <?
  2. function cooKieSent(){
  3. /*
  4. tu regarde si le cookie est présent ou pas
  5. */
  6. }
  7. function sendCookie($nicknmame){
  8. /* definition de ta fonciton */
  9. }
  10. if(!cookieSent()){
  11.       send_cookie($nickname)   
  12. }
  13. ?>
  14. <html>
  15. </html>


 
au passage , inclue "./".$page au lieu de $page  
ca evite que qqun s'amuse a esayer d'inclure une page distante dans ton script ( page qui sera executée par ton serveur , avec acces aux variables et a bcp d'infos de configuration )


Message édité par flo850 le 12-06-2005 à 22:57:30

---------------

n°1117680
Profil sup​primé
Posté le 12-06-2005 à 23:13:51  answer
 

flo850 a écrit :

pas forcement  
tu envoi tes cookies avant index, avec qq chose du genre  

Code :
  1. <?
  2. function cooKieSent(){
  3. /*
  4. tu regarde si le cookie est présent ou pas
  5. */
  6. }
  7. function sendCookie($nicknmame){
  8. /* definition de ta fonciton */
  9. }
  10. if(!cookieSent()){
  11.       send_cookie($nickname)   
  12. }
  13. ?>
  14. <html>
  15. </html>


 
au passage , inclue "./".$page au lieu de $page  
ca evite que qqun s'amuse a esayer d'inclure une page distante dans ton script ( page qui sera executée par ton serveur , avec acces aux variables et a bcp d'infos de configuration )


 
D'accord mais je veux envoyer le cookie que si je viens de cliquer sur valider (dans identification) et que la case "se souvenir de moi" est cochée. je ne veux pas l envoyer a chaque fois que j'arrive sur indexe. Je peux faire ca avec ta technique ?


Message édité par Profil supprimé le 12-06-2005 à 23:14:22
n°1117689
flo850
moi je
Posté le 12-06-2005 à 23:19:54  profilanswer
 

Code :
  1. <?
  2. /*
  3. ici tu peux faire ce que tu veux , du moment que tu ne fait pas d'affichage ( pas de echo / printf )
  4. */
  5. if(isset($_POST['caseACocherPourCreerLeCookie)){
  6. send_cookie($nickname)   
  7. }
  8. /*
  9. ici tu peux faire ce que tu veux , du moment que tu ne fait pas d'affichage ( pas de echo / printf )
  10. */
  11. ?>
  12. </html>
  13. <!-- ici il est deja trop tard pour envoyer des cookie-->
  14. merci de vous etres identifier</html>


Message édité par flo850 le 12-06-2005 à 23:21:27

---------------

n°1117694
Profil sup​primé
Posté le 12-06-2005 à 23:25:35  answer
 

Ok merci bcp :D
Je vais coder ca
Par contre pourrais tu me reexpliquer l'histoire de la page distante ? Comment une page qui nest pas sur mon serveur peut elle etre executée ? Et quels sont les caracteres que je devrais rajouter ? .$page ou "./".$page ?

n°1117702
flo850
moi je
Posté le 12-06-2005 à 23:33:33  profilanswer
 

pas de quoi  
 
pour l'instant tu fais un "brutal"   include($page)
 
pour inclure la page , php va d'abord regarder dans le repertoire courant , puis le long du PATH, et si la page contient http://, il va aussi regarder sur le net
 
fait le test en ayant mis $page = "http://www.google.com";  
 
tu vas voir que ca va inclure la page d'accueil de google  
 
maintenant imagine un petit scénario ( que j'ai deja vu se realiser :sweat: )  

Code :
  1. <?
  2. connecte_bdd();
  3. if(identificationOK($_POST['login'],$_POST['pass'])){
  4.   include($page);
  5. }
  6. ?>


 
et qu'un petit malin arrive a faire inclure

Code :
  1. $tab = getNomDesTablesMySQL(); // facile en mySQL
  2. foreach($tab as $nom){
  3. $query = "DROP TABLE $nom";
  4. mysql_query($query);
  5. }


 
 
et paf , tu n'as plus aucune table mysql  
 
 
alors que si tu fait  

Code :
  1. include("./".$page);

on parle forcement de page présente sur TON serveur
ca complique grandement les choses pour profiter de cette faiblesse


Message édité par flo850 le 12-06-2005 à 23:34:05

---------------

mood
Publicité
Posté le 12-06-2005 à 23:33:33  profilanswer
 

n°1117708
Profil sup​primé
Posté le 12-06-2005 à 23:44:53  answer
 

donc j ai juste a modifier cette partie :
 

Code :
  1. <!-- menu central -->
  2. <td align="center" valign="top" class="comic">
  3. <?php
  4. if (empty($page))
  5.   {
  6.   include("default.php" );
  7.   }
  8. else
  9.   {           
  10.   $includ="$page.php";  // en mettant include("./".$page)
  11.   include($includ);
  12.      }
  13. ?>
  14. </td>
  15. <!-- fin menu central -->

n°1117711
flo850
moi je
Posté le 12-06-2005 à 23:48:30  profilanswer
 

:oui:


---------------

n°1117712
Profil sup​primé
Posté le 12-06-2005 à 23:49:31  answer
 

Bon ben merci bcp de l avertissement et des autres conseils.
 
Je vais coder ca et reviendrai pour dire si je m'en sors ou non ...  :jap:

n°1117794
Profil sup​primé
Posté le 13-06-2005 à 02:30:41  answer
 

Bon j'ai mit la securité pour le include (en même temps ct pas trop dur  :whistle: ) mais bon ca ca marche.
 
Pour le cookie, j'ai modifié comme suit :
 
indexe.php

Code :
  1. <?
  2. include("connect.php" )
  3. ?>
  4. <?
  5. if ($cook == 1)
  6. {
  7. $req_user = mysql_query("SELECT * FROM users where cle='$cle'" );
  8. $nickname = mysql_result($req_user,0,"pseudo" );
  9. $expire   = 365*24*3600;
  10. $cook     = setcookie("pseudo","$nickname",time()+$expire);
  11. }
  12. ?>
  13. <HTML>
  14. <?
  15. include("foncts.php" )
  16. ?>
  17. <script language=javascript>
  18. var params_meteo="type_meteo=terrestre&langue=fr&fond=FFF0AA&texte=0000FF&saisie_meteo=caen";
  19. </script>
  20. <HEAD>
  21. <TITLE>Bienvenue sur Ioiolodie's website</TITLE>
  22. </HEAD>


 
et :
identification.php

Code :
  1. if($souvenir == "on" )
  2.     {
  3.     $cook = 1;
  4.     }
  5. else
  6.     {
  7.     $cook = 0;
  8.     }
  9. ?>
  10. <!-- menu central -->
  11. <table border="1" width="100%" class = "bordure" >
  12. <tr><td align="center"><blink><font size="4">Votre identification s'est déroulée avec succés</font></blink><br><br>
  13.         <center><a href="indexe.php?page=identification&cook=<? echo($cook);?>&cle=<? echo($key);?>" title="Index"><font                                       
  14.         color='white' size='1'>Retour</font></a></center></td></tr>
  15. </table>
  16. <!-- fin menu central -->


 
et ca me renvoit toujours la mm erreur.
Qu'est ce que j'ai mal codé ?

n°1117891
flo850
moi je
Posté le 13-06-2005 à 10:09:26  profilanswer
 

entre le ?> de la ligne 3 et le <? de la ligne 5 , il y a un saut de ligne, donc des caractères envoyés au navigateurs
 
il ne faut pas qu'il y ait de caractères envoyés avant l'appel a la fonction setcookie
 
idem , si tu as des espaces avant le <? de la ligne 1 , enleve les


---------------

n°1118762
Profil sup​primé
Posté le 13-06-2005 à 20:56:09  answer
 

flo850 a écrit :

entre le ?> de la ligne 3 et le <? de la ligne 5 , il y a un saut de ligne, donc des caractères envoyés au navigateurs
 
il ne faut pas qu'il y ait de caractères envoyés avant l'appel a la fonction setcookie
 
idem , si tu as des espaces avant le <? de la ligne 1 , enleve les


 
wow c a ce point la ? Bon ben c'est corrigé et ca marche.
Maintenant je m'attaque à l'affichage et il me fait encore une erreur:
Parse error: parse error, unexpected '\"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/ioiolodi/www/indexe.php on line 73
mais je desespere pas je vais trouver :sweat:

n°1118767
flo850
moi je
Posté le 13-06-2005 à 20:59:33  profilanswer
 

c 'est a ce point là  [:twixy]  
tu nous donen le contenu de la ligne 73  [:tilleul]  ?


---------------

n°1118784
Profil sup​primé
Posté le 13-06-2005 à 21:17:28  answer
 

Vi c'est a ce point la :(
 
la ligne 73 c un banal affichage de cookie
 

Code :
  1. <? echo "$_COOKIE["pseudo"]"; ?>


 
mais bon la je fait des verifs pour savoir si le cookie a bien ete envoyé

n°1118786
flo850
moi je
Posté le 13-06-2005 à 21:20:34  profilanswer
 

mets plutot echo $_COOKIE["pseudo"];  


---------------

n°1118801
Profil sup​primé
Posté le 13-06-2005 à 21:29:23  answer
 

bon ben ca marche merci bcp
mais j avais prit cette ligne de code sur phpdebutant alors comprend pas pourquoi ca genere une erreur
merci bcp de ton aide précieuse :d :jap:


Message édité par Profil supprimé le 13-06-2005 à 21:29:57
n°1118804
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 13-06-2005 à 21:30:42  profilanswer
 

bah normal regard la gueule des guillemeets tu va comprendre...

n°1118810
Profil sup​primé
Posté le 13-06-2005 à 21:32:25  answer
 

pmusa a écrit :

bah normal regard la gueule des guillemeets tu va comprendre...


 
a l'origine c'etait :  

Code :
  1. echo "Bonjour $_COOKIE["pseudo"]";


 
guillemet pour guillemet ce qui etait marqué sur phpdebutant
mais bon je ne vais plus me fier qu'a nexen du coup :p

n°1118823
flo850
moi je
Posté le 13-06-2005 à 21:37:10  profilanswer
 

essaye plutot echo "Bonjour ".$_COOKIE['pseudo'];


---------------

n°1118831
Profil sup​primé
Posté le 13-06-2005 à 21:38:39  answer
 

c'est ce que j ai fait, maintenant ca marche :)
merci bcp flo


Message édité par Profil supprimé le 13-06-2005 à 21:38:58
n°1118892
flo850
moi je
Posté le 13-06-2005 à 22:12:49  profilanswer
 

de rien


---------------

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Cookies, pb headers !!

 

Sujets relatifs
Les headers[ASP] Perte de variable de session en utilisant des cookies
Changement d'utilisateur : Renommer tous les cookies ![Apache] Cookies en "static" ?
[java] gestion des cookies avec IE[Securité] Gestion mot de passe / cookies et SSL
[PHP] Identification automatiques (via cookies ???)Gérer les sessions sans cookies ????
Récupérer les cookies lors d'une connection httpperdu dans les cookies
Plus de sujets relatifs à : Cookies, pb headers !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR