Probleme session-start() PHP

Fermé
Zanjutsu - 14 mai 2010 à 14:12
aure-kun Messages postés 4 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 25 mai 2010 - 25 mai 2010 à 18:20
BBonjour à tous !
J'ai un problème avec mon site, en effet je souhaites créer un espace membre en utilisant session_start() lorsque je donne le login et mot de passe ca m'affiche ceci:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28

Warning: Cannot modify header information - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 32



Voici la page Ad_Login_Exec :

<html>
<body>
<?php
require("Connect.php");

//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];

$cnx = mysql_connect(SERVEUR,NOM,MOTDEPASSE) or die ("erreur de connexion au serveur mysql :".SERVEUR);
mysql_select_db(BASE, $cnx) or die ("erreur lors de la sélection à la BDD : ".BASE);

//La requête de vérification de l'existence de l'utilisateur
$LaRequete ="SELECT Login FROM T_Utilisateurs
WHERE Login ='". $MonLogin . "'
AND MotDePasse = md5('" . $MonPassword . "');";

//exécution de la requête
$ResultatRequete = mysql_query($LaRequete) or die("Erreur SQL ! <br><br>".$LaRequete."<br><br>".mysql_error);
mysql_close($cnx);

//si aucun retour c'est que l'utilisateur ou le mot de passe n'est pas valide
if (mysql_num_rows($ResultatRequete)==0)
{ //retour à la page login
header("location:Ad_Login.php?Retour=1");
}
else //si les mots de passe et login sont valides
{session_start();//on démarre une session
$_SESSION['NumSession'] = session_id(); //enregistrement du numéro de session
//on enregistre la variable utilisateur en tant que variable session
$_SESSION['Utilisateur']=$MonLogin;
header('location:Ad_MenuAdministration.php'); //redirection vers le menu d'administration
}
?>
</body>
</html>

4 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
Modifié par Nabla's le 14/05/2010 à 14:24
et oui, evidement, le cookie de sesion est envoyé dans le header (avant l'html). et toi tu nous fait ca :
<html>
<body>
<?php
require("Connect.php");

//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];

$cnx = mysql_connect(SERVEUR

tu envoies du html, puis dedan tu déclare l'envoi d'un cookie. ca ne peut pas marcher (sauf en activant la bufferisation). il faut que tu mette ton require("connect.php") au début du fichier:

<?php require("Connect.php"); ?>
<html>

<body>
<?php


//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];

$cnx = mysql_connect(SERVEUR

retiens ceci: a partir du moment ou t'as du HTML ou un ECHO qui a été executé, t'as plus le droit d'envoyer de cookie (session ou autre), ni de modifier une autre entete HTTP. Meme une ligne vide ou du commentaire HTML te fera planter. et meme un fichier avec BOM te fera planté (c'est un octet en début de fichier, je sais plus a quoi il sert, mais il m'a déja emmerdé)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 mai 2010 à 14:41
je ne pense pas que ce soit Connect.php qui envoie le session_start();

donc il suffit d'enlever
<html>
<body>

au début du script

pour respecter la règle donnée par Nabla's
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
14 mai 2010 à 14:58
pardon oui, j'avais supposé que c'était dedan, j'avais mal lu tout le code... pusqu'on trouve ces lignes la:

header("location:Ad_Login.php?Retour=1"); 
} 
else //si les mots de passe et login sont valides 
{session_start();//on démarre une session 
$_SESSION['NumSession'] = session_id(); //enregistrement du numéro de session 


qui vont poser problème. Il faut donc pas faire d'echo ou mettre de html avant ces lignes
0
aure-kun Messages postés 4 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 25 mai 2010
18 mai 2010 à 22:19
Bonjour a vous,

J'ai a peu de choses pres le meme probleme sauf que j'utilise des cookies pour la connexion voici mon code:

<?php
	require_once("connexion.php");
    $co = mysql_connect($serveur,$user,$mdp);
    mysql_select_db($base);                        
		if(isset($_COOKIE["ID"])){
			$connecte = 1
		}
?>
<html>
<head>
<body>
...(du code html)
<?php                    
    if($connecte == 1){
                        
       //On recupere le pseudo de l'utilisateur en fonction de son ID unique dans la base de donnée
      $result = mysql_query ("SELECT pseudo FROM compte WHERE ID = '".$_COOKIE["ID"]."' ");
    
      while ($line = mysql_fetch_array($result)){
          $pseudo = $line["0"];
      }
?>
<form method="post" action="php_delog.php">
    <table width="100%">
        <tr>
            <td class="pseudo">
                <?php
                    echo("Bonjour $pseudo");
                ?>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" name="Deconnexion" value="Deconnexion" id="bouton_deco"/>
            </td>
        </tr>
    </table>
</form>

<?php
    }
    else{
?>
<form method="post" action="php_log.php">
    <table>
        <tr>
            <td colspan="2">
                Identifiant
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="text" maxlength="20" size="23" name="pse"/>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                Mot de passe
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="password" maxlength="20" size="23" name="mdp"/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" name="Connexion" value="Connexion" />
            </td>
            <td>
                 <a href="inscription.php"><input type="button" name="S'inscrire" value="S'inscrire" /></a>
            </td>
        </tr>                       
    </table>
</form>

<?php
    }                 
    mysql_close($co);
?>


Donc lorsque je me connecte aucun message d'erreur n'apparait mais je ne suis pas pas connecté le cookie n'a pas été créer et le message [PHP] Header already sent by (output started at /home/chaudron/public_html/php_log.php:1) in /home/chaudron/public_html/cookie_inc.php on line 5 ... apparait dans le error.log de mon serveur ...

Voici mon php_log.php :

<?php
	
	require_once("connexion.php");
	
	//Si les champs pseudo et mot de passe ne sont pas vide
	if (!empty($_POST['pse']) and !empty($_POST['mdp'])){
		
		//Connexion à la base de donnée et definition de la variable $active a 1
		$link = mysql_connect($serveur,$user,$mdp);
		mysql_select_db($base);
		
		//On recupere l'id du compte dont le pseudo et le mot de passe correspondent
		$result = mysql_query ("SELECT ID, pseudo, mdp FROM compte WHERE pseudo = '".$_POST["pse"]."' AND mdp = md5('".$_POST["mdp"]."') ");
		
		//On Stocke l'id de l'utilisateur
		while ($line = mysql_fetch_array($result)){
			$id_user = $line["0"];
			$pseudo = $line["1"];
			$mdp = $line["2"];
		}
		
		mysql_close($link);
		
		if($_POST['pse'] == $pseudo and $_POST['mdp'] == $mdp){
			//On crée le cookie grace a l'id de l'utilisateur et grace auquel l'utilisateur sera logué et redirection vers l'accueil
			setcookie("ID",$id_user,(time() + 3600));
			echo "<script type=\"text/javascript\"> location='accueil.php' </script>";
		}
		
		//Si l'identifiant et le mot de passe ne correspondent pas on redirige vers l'accueil
		else {
			echo "<script type=\"text/javascript\"> alert(\" Votre identifiant ou votre mot de passe est incorrect\"); location='accueil.php' </script>";
		}
	}
	
	//Si un des champs est vide on redirige vers l'accueil
	else {
		echo "<script type=\"text/javascript\"> alert(\"Attention un ou plusieurs champs sont vides; veuillez bien remplir tous les champs\"); location='accueil.php' </script>";
	}
	
?>


Comment puis-je contourner ce probleme ?
Une chose aussi qui me parait bizarre c'est qu'en local cela fonctionnait très bien pourquoi ?
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
21 mai 2010 à 15:42
réponse de facilité:

au lieu de faire des echo, prints, ou de mettre du html, tu stoques tout ton code html de retour dans une variable php. Ainsi, tu fais echo tavariable ) la fin du code, et ca passe...
ceci dit, en structurant vos programmes, vous devriez arriver à faire d'abord le traitement, ensuite l'affichage
0
aure-kun Messages postés 4 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 25 mai 2010
25 mai 2010 à 18:20
Merci de ta reponse,

Effectivement si j'aurais mieux raisonner mon code aurait été plus propre ... je pense que quand j'aurais le temps je reprendrai tout depuis le debut
0