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 :

Problème de session_start


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut Problème de session_start
    Salut,

    je viens de reprendre le travail d'une autre personne, que j'ai installé en local sur ma machine (interface web en php communiquant avec postgreSQL sous Apache).

    Une des sections nécessite d'être identifiée et j'utilise bien les paramètres de l'administrateur présents dans la BD mais le login et pwd ne semblent pas donner quelque chose de positif.

    J'obtiens ces messages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\Appli\FilePath\connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\Appli\FichierC\session.php on line 28
     
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\Apache Group\Apache2\htdocs\Appli\FilePath\connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\Appli\FichierC\session.php on line 28
     
    Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\Appli\FilePath\connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\Appli\FichierC\session.php on line 55
    Je ne sais pas trop ce que ça signifie mais en tout cas je suis bloqué !

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    regardes dans ton fichier connexion tu doit avoir une ligne ou un espace avant le <?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J'ai juste modifié l'emplacement de session_start dans le fichier session.php comme le stipulait la doc php -> plus de Warnings mais mon problème d'identification n'est pas résolu donc ça n'avait pas d'influence sur l'affichage des pages.

    Ces warnings ne bloquent donc pas l'affichage des pages d'un site ?

    La personne qui a développé ce site a développé l'ouverture d'une session de cette manière :

    - Récupération des login et pwd de l'utilisateur saisis dans un formulaire
    - Vérification dans la BD que cet utilisateur existe
    - S'il existe, boucle executée avec session_start :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ( $nb_r == 0 ) { //  Pas de reconnaissance de l'Utilisateur
     
    	echo '<body onLoad="alert(\'Identification unrecognized for consultation\')">';
    	echo '<meta http-equiv="refresh" content="0;URL=identification.php">';
    } else { //<!-- l'utilisateur est reconnu -->
    	$write=0;
    	//  demarage de la session 
            session_start();
    ...
    }
    Il vaut donc mieux écrire le session_start juste après le <?

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    le session start doit etre avant tout envoit de données.

    donc avant des echo ou du texte ou html qui serais en dehors des balises <? ?>

  5. #5
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Finalement, le dernier warning me pose encore des soucis !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\Appli\FilePath\connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\Appli\FichierC\session.php on line 55
    Il n'y a rien au début du fichier connexion.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?
    if ( file_exists('Fichiers_generaux/db_connection.php') ) {
    	include ('Fichiers_generaux/db_connection.php');
    } 
     
    // connexion à  la base de donnée
      $connexion = dbconnect("user=x dbname=db password=x");
     
     
      $messerreur = "Pb de connexion...";
     
      if ( $connexion == 0 || $connexionIdU == 0 )  {
      	include ("../Fichiers_generaux/Design.php");
    	Entete("Server not ready");
    	echo ("<div align=center><br><br><br><br>");
    	echo("<b><h1><font color=#FF0000>This service is not currently accessible</font></h1></b><br>");
    	echo("<b><H1>Please excuse us</H1></div><br><br><br>");
    	PiedDePage( $Pv, $PVar );
    	exit;
      } 
     
    ?>
    Et dans mon fichier session.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?
    // Où j'ai redéplacé session_start
    session_start();
     
    include("../FilePath/connexion.php");
     
    if ($connexionIdU == 0) {
     
    	Entete("Server not ready");
    	echo ("<div align=center><br><br><br><br>");
    	echo("<b><h1><font color=#FF0000>Ce service n'est pas accessible actuellement.</font></h1></b><br>");//'
    	echo("<b>Veuillez nous excuser.</div><br><br><br>");
    	PiedDePage();
    	exit;
    }
     
     
     
    // <!-- Vérification de l'identification par rapport à  la base de données -->
    $res = Execute ( $connexionIdU, " select log, pwd from utilisateur where log = '$login' and pwd = '$pwd' " );
    $nb_r = getNumRows ( $res );
     
    if ( $nb_r == 0 ) { // <!-- Pas de reconnaissance de l'Utilisateur -->
     
    	echo '<body onLoad="alert(\'Identification unrecognized for consultation\')">';
    	echo '<meta http-equiv="refresh" content="0;URL=identification.php">';
    } else { //<!-- l'utilisateur est reconnu -->
     
    	// <!-- demarrage de la session -->
            // Où session_start était avant
            $write=0;
     
    	// vérification du droit 
    	$req_d = "select nom_droit from droit, user_prog, utilisateur where droit.id_droit = user_prog.id_droit and user_prog.id_utilisateur = utilisateur.id_utilisateur and log ='$login' ";
    	$res_d = Execute ( $connexionIdU, $req_d );
    	$nbRoD = getNumRows($res_d);
    	echo $req_d;
    	if ( $nbRoD != 0 ) {
    		while ( $id_nbro < $nbRoD ) {
    			$droit = getResult( $res_d, $id_nbro,0);
    			echo "Droit = $droit<br>";
    			if ( $droit == "Un truc" || $droit == "Un autre truc") {
     
                                    // <!-- enregistrement des paramétres de l'utilisateur comme variable de session -->
                                    session_register ("login");
    				session_register ("pwd");				
    				// <!-- redirection de l'utilisateur vers la page de recherche --> 
    				header('location: PageRecherche.php#Haut'); // C'est là qu'il y a PBM
    				$info_droit=1;
    				$id_nbro=$nbRoD;
    			}
    ...
    ?>
    Qu'est ce qui pourrait donc bien clocher là-dedans ?!!!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    verifie aussi qu'il n'y est pas d'espace entre la premiere balise php et le haute de ton fichier
    ton erreur , apparement provient de la ligne 1 de connexion.php

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    t es sur que t as pas une ligne vide avant le <? :

    sinon il ne faut pas que ce soit le cas dans les fichiers que tu inclus dans connexion et donc pas de echo ou de html dedans non plus

  8. #8
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Oui, je suis sûr, il n'y a pas de ligne avant !

    sinon il ne faut pas que ce soit le cas dans les fichiers que tu inclus dans connexion et donc pas de echo ou de html dedans non plus
    Le fichier que j'inclus dans connexion ne semble pas être problématique non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?
    /*
    Ce script permet de rendre les accès bases de données
    indépendant d'un SGBD particulier.
    */
     
    function dbconnect($chaine_connexion)
    	{
    	return pg_connect($chaine_connexion); 
    	}
     
     
    function Execute($connexion,$requete)
    	{
    	return pg_exec($connexion,$requete);
    	}
     
    function getNumRows($resultSet)
    	{
    	return pg_numRows($resultSet);
    	}
     
    function getRow($resultSet,$numRow)
    	{
    	return pg_fetch_row($resultSet,$numRow);
    	}
     
    function getNumFields ($resultSet)
    	{
    	return pg_NumFields($resultSet);
    	}
     
    function getResult($result, $numrows, $numfields)
    	{
    	return pg_result($result, $numrows, $numfields);
    	}
     
    ?>

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    dans ton code principale tu a laisser des cariable de deboguage avec des echo
    echo $droit

  10. #10
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Oui, mais c'est après session_start() !

    En les enlevant, ça ne fait rien. J'ai quand même essayé au cas où.

    Il y a tout de même tous les echo de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo ("<div align=center><br><br><br><br>");
    echo("<b><h1><font color=#FF0000>Ce service n'est pas accessible actuellement.</font></h1></b><br>");
    Je ne vais quand même pas les enlever.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    c'est apres session_start effectivement , mais avant un header
    le header a les meme defaut que le session_start
    on ne peut avoir aucun sortie avant celui-ci

  12. #12
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Mais pourtant ce code fonctionnait sans souci avant que je ne l'installe sur ma machine ! Ces warnings n'apparaissaient pas ou étaient masqués. Est-ce que ça dépend des versions de php ou quoi ?

    Est-ce que ça peut faire bloquer mon site car sinon je crois que c'est toutes les pages que j'ai à retoucher ! En fait, c'est juste pour tester mes modifs en local donc si ça n'est pas parfait, ça n'est pas génant !v

  13. #13
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J'ai quasiment tout (echo + ce qui pouvait gêner) mis en commentaire, mais ça ne change rien !

    Ca m'indique toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\Appli\FilePath\connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\Appli\FichierC\session.php on line 68
    Je ne vois pas pas pour la ligne 1 de connexion.php ! C'est exactement comme ce que je vous ai mis dans ce poste !

  14. #14
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J'ai placé alors le header en tout début de fichier juste après le session_start() et là, ça passe ! Donc les warnings peuvent bien bloquer la suite des événements !

    Il doit bien y avoir un moyen de bloquer les warnings dans les options de php, n'est ce pas ?

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    bien sur que les warning empeche les header !
    Pour empecher les warning : corrige ton code

  16. #16
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Pour empecher les warning : corrige ton code
    Bien sûr, mais je ne comprends pas pourquoi ça marche ailleurs ! Juste le fait de l'installer sur ma machine a fait apparaître ces problèmes donc c'est pour ça que je pense qu'il y a une option dans php qui permet de s'en affranchir !

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Oui il y en a une mais laisse la comme elle est, elle est très bien

    Aller cadeau : http://php.net/error_reporting

  18. #18
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Ah effectivement, c'est un beau cadeau ! Je vais tester ça de suite.

    C'est vrai que c'est un peu sauvage de faire ça mais quand le code a été éprouvé et qu'il ne sera lancé que sur ma machine, ça n'est pas bien grâve !

    Merci.

    PS : ça fait déjà plusieurs fois que tu me trouves des trucs sympas, encore merci Mr N.

  19. #19
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Oui, ça empêche bien l'affichage des warnings avec error_reporting(0); mais l'application reste bloqué sur une page blanche : on ne peut pas avoir le beurre et l'argent du beurre ! Dans mon cas, ça n'est donc pas intéressant car le message est trop important pour passer à côté !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 16/08/2007, 16h37
  2. Problème avec session_start()
    Par selmac594 dans le forum Windows
    Réponses: 2
    Dernier message: 22/03/2007, 21h11
  3. [Cookies] problème avec session_start
    Par tom42 dans le forum Langage
    Réponses: 2
    Dernier message: 13/03/2007, 14h25
  4. [Cookies] Problème avec session_start
    Par philippef dans le forum Langage
    Réponses: 3
    Dernier message: 29/06/2006, 20h55
  5. problème avec session_start()
    Par hanane_iaai dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2005, 17h46

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