Cookies, pb headers !! - PHP - Programmation
Marsh Posté le 12-06-2005 à 21:25:02
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)
Marsh Posté le 12-06-2005 à 21:27:28
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 ?
Marsh Posté le 12-06-2005 à 22:49:39
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 <? ?> )
Marsh Posté le 12-06-2005 à 22:52:30
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 ?
Marsh Posté le 12-06-2005 à 22:55:56
pas forcement
tu envoi tes cookies avant index, avec qq chose du genre
Code :
|
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 )
Marsh Posté le 12-06-2005 à 23:13:51
flo850 a écrit : pas forcement
|
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 ?
Marsh Posté le 12-06-2005 à 23:19:54
Code :
|
Marsh Posté le 12-06-2005 à 23:25:35
Ok merci bcp
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 ?
Marsh Posté le 12-06-2005 à 23:33:33
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 )
Code :
|
et qu'un petit malin arrive a faire inclure
Code :
|
et paf , tu n'as plus aucune table mysql
alors que si tu fait
Code :
|
on parle forcement de page présente sur TON serveur
ca complique grandement les choses pour profiter de cette faiblesse
Marsh Posté le 12-06-2005 à 23:44:53
donc j ai juste a modifier cette partie :
Code :
|
Marsh Posté le 12-06-2005 à 23:49:31
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 ...
Marsh Posté le 13-06-2005 à 02:30:41
Bon j'ai mit la securité pour le include (en même temps ct pas trop dur ) mais bon ca ca marche.
Pour le cookie, j'ai modifié comme suit :
indexe.php
Code :
|
et :
identification.php
Code :
|
et ca me renvoit toujours la mm erreur.
Qu'est ce que j'ai mal codé ?
Marsh Posté le 13-06-2005 à 10:09:26
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
Marsh Posté le 13-06-2005 à 20:56:09
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 |
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
Marsh Posté le 13-06-2005 à 20:59:33
c 'est a ce point là
tu nous donen le contenu de la ligne 73 ?
Marsh Posté le 13-06-2005 à 21:17:28
Vi c'est a ce point la
la ligne 73 c un banal affichage de cookie
Code :
|
mais bon la je fait des verifs pour savoir si le cookie a bien ete envoyé
Marsh Posté le 13-06-2005 à 21:29:23
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
Marsh Posté le 13-06-2005 à 21:30:42
bah normal regard la gueule des guillemeets tu va comprendre...
Marsh Posté le 13-06-2005 à 21:32:25
pmusa a écrit : bah normal regard la gueule des guillemeets tu va comprendre... |
a l'origine c'etait :
Code :
|
guillemet pour guillemet ce qui etait marqué sur phpdebutant
mais bon je ne vais plus me fier qu'a nexen du coup
Marsh Posté le 13-06-2005 à 21:37:10
essaye plutot echo "Bonjour ".$_COOKIE['pseudo'];
Marsh Posté le 13-06-2005 à 21:38:39
c'est ce que j ai fait, maintenant ca marche
merci bcp flo
Marsh Posté le 12-06-2005 à 21:21:31
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 :
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 :
puis la page identification, d'où j'appelle la fonction cookie :
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
Qqun pourrait m'aider ?
Merci
Message édité par Profil supprimé le 12-06-2005 à 22:23:36