PHP : PhpMyAdmin : Pb session et/ou cookies

Fermé
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009
- 19 janv. 2007 à 15:06
 foufou - 27 avril 2007 à 18:16
Bonjour à tous
Je développe actuellement un site avec un sevreur apache et j'utilise EasyPHP.
Mon pb est le suivant : j'ai créé des sessions pour la gestion de l'administration du site et l'accés à la base de données. Le développement fonctionne parfaitement sous Fedora core 5 mais dés que je test le mm code sous Windows, c'est la foire aux alertes php. voici un exemple d'erreur renvoyée :

Warning: session_start(): Cannot send session cookie - headers already sent by...

Comme vous pouvez le constater, le pb fais reference au header.
J'ai déjà regardé sur bon nombre de forums et mm sur le site de phpMyAdmin, qui reconnait avoir cette erreur fréquement mais aucunes solution n est prposée.
Voila, si vous avez une idée et qq instants à m accorder
Merci d'avance

7 réponses

Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 006
19 janv. 2007 à 15:21
Bonjour,

En fait, il y a de très fortes chances pour que les alertes aient déjà été présentes sous Linux, mais n'aient pas été affichées du fait des paramètres du serveur php (c'est, en effet, configurable au niveau du serveur...)

Le problème que tu décris vient de la structure du message http.
Quand le serveur web renvoie des informations au navigateur, il envoie d'abord un "header", qui contient notamment les cookies et d'autres informations sur la page elle-même.
Ensuite, le corps du message http contient le code html de la page.

Le serveur Apache envoit tout ça sans qu'on le lui demande explicitement, en général.

Toutefois, certaines fonctions Php impliquent une modification de ce header. C'est le cas de la mise en place d'un cookie, d'une session (puisqu'elles sont identifiées par un cookie), mais aussi de la fonction headers() qui permet de les modifier explicitement.

Toutefois, dans ta page php, suppose que tu aies, en haut de page, un "<html>" , ou un "echo $truc;".
Que va faire le serveur : il va voir qu'il faut envoyer ces informations au client. Seulement pour les envoyer, il faut commencer par envoyer le header de la réponse !
Donc il génère un header "par défaut", et l'envoie au client avec le début du code html demandé.

Si, ensuite, dans ta page, tu appelles méthode qui demande de modifier les headers, tu obtiens le message d'erreur que tu nous montres : "Warning: session_start(): Cannot send session cookie - headers already sent by... "

Voilà, j'espère que mes explications t'ont permises de comprendre le problème. Evidemment, la solution est donc de faire ton session_start() avant toute autre chose sur ta page, y compris avant le <html> !

Bon courage pour la suite,

Xavier
0
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009

19 janv. 2007 à 15:34
Merci beaucoup, pb résolu. Pourtant j'avais déjà essayé cette manipulation.

Pour des personnes qui auraient le même pb : ATTENTION : Php ne concède AUCUN ESPACE NI CARACTERE AVANT LE <? session_start() ?>

Merci encore.

Fréd
0
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 006
19 janv. 2007 à 16:04
Tu peux nous donner le code de ta page s'il te plait ?
0
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009

23 janv. 2007 à 14:48
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<? session_start(); ?>
<html>

<head>
<title>Test Site Ardéchoise</title>
<meta name="GENERATOR" content="Quanta Plus">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


</head>

<body background="image/degard.jpg" bgcolor="white">



<DIV
style="PADDING-BOTTOM: 5px; WIDTH: 100%; LINE-HEIGHT: 1em; PADDING-TOP: 3px; TEXT-ALIGN: center">
<table border="0" align="center"><tr><td width="15%"><IMG SRC="./image/logoard.png"></td><td width="60%"><IMG SRC="./image/lardechoise.png"></td><td width="15%"><IMG SRC="./image/logoard.png"></td></tr></table>
</DIV>

<?

echo '<table border="0" align="center"><tr><td align ="left" width=100%> Vous êtes connecté en tant que :  ' .$_SESSION["login"].'</td><td align="right" width=100%><a href = "index.php"> Déconnexion </a></table><br />';

?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

c'est tout bete ton probleme que tu as.

Tu viens de passer sous windows ? Je te conseille alors de mettre "short_open_tag = On" car dans ton code , tu ouvre les balises php de cette manière "<?" (pas génial en +, vaut mieux utiliser "<?php")

tcho
0
salut,
merci dejà pour votre aide car je suis restée des heures en essayant de comprendre d'où venait le mesage d'erreur, mais là j'ai un autre problème, mon script permet de passer les informations du web vers un format excel, mais quand je l'ouvre avec internet explorer il m'affiche le tableau en html et quand je l'ouvre avec mozilla il m'ouvre un fichier excel avec une taille assez importante mais les cases sont vides.
mon script est le suivant:
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=toto.xls");
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("application") or die(mysql_error());
$result=@mysql_query("select * from Sites ") or die(mysql_error());
while($row=mysql_fetch_array($result)) {
$txt1=$row['Nom_sites'];
$txt2=$row['Nom_siteA'];
$txt3=$row['Nom_siteB'];
$txt4=$row['Configuration'];
$txt5=$row['Securite'];
$txt6=$row['Capacite'];
$txt7=$row['DR'];
$txt8=$row['ZEM'];
$txt9=$row['Diametre_antenne'];
$txt10=$row['Longeur_du_bond'];
$txt11=$row['Reception_par_chef_de_centre'];
$txt12=$row['Date_recep_chef_centre'];
$txt13=$row['Reception_par_division_de_controle'];
$txt14=$row['Date_recep_division_controle'];
$txt15=$row['Annule'];
$txt16=$row['Date_fin_traveaux'];
$txt17=$row['Remis_en_service'];
$txt18=$row['Date_remise_en_service'];
$txt19=$row['Survey'];
$txt20=$row['Statut_installation'];
$txt21=$row['Client'];
}
if (@mysql_numrows($result) ==0)
{ // si elle est vide, on en informe l'utilisateur à l'aide d'un Javascript
print "<script> alert('La requête n\'a pas abouti !')</script>";
}
// construction du tableau HTML
print '<table border=1>
<!-- impression des titres de colonnes -->
<TR><TD>Nom site</TD><TD>Nom site A</TD><TD>Nom site B</TD><TD>Configuration</TD><TD>Sécurité</TD><TD>Capacité</TD>
<TD>DR</TD><TD>ZEM</TD><TD>Diametre antenne</TD><TD>Longeur du bond</TD><TD>Reception par chef de centre</TD>
<TD>Date de récéption</TD><TD>Récéption par division de controle</TD><TD>Date de récéption</TD><TD>Annulé</TD>
<TD>Date fin traveaux</TD><TD>Remis en service</TD><TD>Date de remise</TD><TD>Survey</TD><TD>Statut installation</TD>
<TD>Client</TD></TR>';
// lecture du contenu de la requête avec 2 boucles imbriquées; par ligne et par colonne
for ($ligne=0 ; $ligne<@mysql_numrows($result);$ligne++)
{
for ($colonne = 0;$colonne < 21 ; $colonne++)
{
print '<TD>' .mysql_result($result , $ligne,$colonne). '</TD>';
}
print '</TR>';
}
print '</TABLE>';
mysql_close();
// on informe l'utilisateur de la réussite
if (@mysql_numrows($result) >0)
{
print "<script> alert('La table est bien mise à jour !')</script>";
}
?>
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
aidez moi je vous en supplie :(
0
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 006
26 avril 2007 à 08:32
Bonjour,

Le seul truc que je voie qui ne va pas, c'est ça :
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>

Tu déclares la structure de ton document html après avoir affiché ta table !

Il faut en mettre le début :

<html>
<head>
<title>Document sans titre</title>
</head>
<body>

avant ton print ('<table...
La fin peut rester ou elle est.
0
ooh merci bcp j avais même pas fait attention, j'avais fait un enorme copier coller suite au problème de headers (le fait de ne rien écrire avant la balise ouvrante de php) il faut dire qu'il m'avait trop soulé :D merci encore une fois.
0