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 :

session_start en debut de page et pourtant comportement chaotique..


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut session_start en debut de page et pourtant comportement chaotique..
    Bonjour,
    j'ai recherché sur le forum et des sites le fonctionnement de session_start(); je pense avoir saisi le truc, mais j'ai un probléme sur ma page.

    en effet, Ma page de login me redirige vers l'index avec les variable de session approprié. La premiére fois tout marche mais lorsque que je rafraichis la page les variables de sessions prennent des valeurs qu'elles ne devraient pas prendre ( un autre utilisateur ).

    Voici mon code de login :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?
    session_start();
     
     
     
     
    require('connexion.php');
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['mdp'])) {
     $login = $_POST['login'];
     $mdp = $_POST['mdp'];
     
      // on recupère le password de la table qui correspond au login du visiteur
      $sql = "select * from Membres where login='".$login."'";
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
      $data = mysql_fetch_assoc($req);
     
      $droits = $data['droits'];
     
     
     
     
      if  ($data['mdp'] != $mdp) { //||  ( empty($data) ) )  {
        echo '<p>Mauvais login / password. Merci de recommencer</p>';
    	 $_SESSION['login'] = "corrupted";
    	$_SESSION['droits'] = "corrupted";
     
        require('index.php'); // On inclut le formulaire d'identification
       exit;
      }
     else {
     
     
     
        $_SESSION['login'] = $login;
     
    	$_SESSION['droits'] = $droits;
    	$_SESSION['id'] = session_id();
     
     
     
    	if ( strcmp($droits,"admin") == 0 )
    	{
    		header("Location:indexa.php");
    		}
    	else 
    		{
    			header("Location:indexuser.php");
    		}
     
     
     
     
     
      }   
    }
    else {
      echo '<p>Vous avez oublié de remplir un champ.</p>';
       require('index.php'); // On inclut le formulaire d'identification
       exit;
    }
     
     
    ?>

    et mon indexa.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
     
    <? session_start();
     
    echo $_SESSION['login'];
    echo $_SESSION['droits'];
     
     
    require('verifadmin.php');
     
     
     
    ?>
     
     
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
     
    <html>
    // code de la page sans importance...

    merci a vous

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    J'espère que ton premier bout de code n'est pas celui de verifadmin.php car sinon je ne comprend pas trop.


    Tu appelles ton index qui appelle lui meme verifadmin.

    verifadmin vérifie que les champs login et mdp ont bien été postés. Si ce n'est pas le cas il rappelle index, qui rappelle alors verifadmin...

    Ca m'a l'air d'etre une belle boucle infinie à vrai dire lors du lancement, je ne comprend meme pas comment cela peut fonctionner

    Pour ta mise en session personnellement je vérifie avant tout si les sessions existent ou non.
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    En fait pour le moment, le fichier verif_admin.php est vide,
    il n'y a donc pas de boucle


    j'ai essayé de vérifier avant si les sessions n'étaient pas définies mais c'est la même chose.

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Le premier code correspond à quoi ? quand est il lancé ?
    Quel est l'ordonnancement de tes page ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    voici les warnings :

    Warning: session_start() [function.session-start]: open(/mnt/99/md1/5/c/flo.barral/sessions/sess_8507d39c2e02c005ff786f1777db8f9f, O_RDWR) failed: No such file or directory (2) in /mnt/99/md1/5/c/flo.barral/projet1V1.0/indexa.php on line 1

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/99/md1/5/c/flo.barral/projet1V1.0/indexa.php:1) in /mnt/99/md1/5/c/flo.barral/projet1V1.0/indexa.php on line 1

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/99/md1/5/c/flo.barral/projet1V1.0/indexa.php:1) in /mnt/99/md1/5/c/flo.barral/projet1V1.0/indexa.php on line 1
    Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    resalut,
    en fait le premier code est la page login.php qui est une page de saisie de login et de mot de passe, le deuxieme est le debut de ma page d'indexa.php ou est redirigé l'utilisateur lorsqu'il est loggé.
    Merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Ahhh oui tout s'éclaire !

    Dans ton premier script tu fais un appel à index.php qui possède un session_start().
    Or du coup il n'est pas placé en premier, d'ou cette erreur.

    Il faudrait revoir la conception, par exemple faire un <meta refresh> à la place.
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    "Dans ton premier script tu fais un appel à index.php qui possède un session_start().
    Or du coup il n'est pas placé en premier, d'ou cette erreur."

    Comment ca, il n'est pas placé en premier ? dans l'index.php il n'y a pas de code php en fait c juste le code de la page de login, le code que j'ai mis la c'est le code indexa.php qui lui est une nouvelle page donc contient session_start en premier.

    Pour résumer::

    login.php[index.php] ----redirige vers---> indexa.php


    un session start au debut de login.php, un autre au debut de indexa.php


    Donc les deux session_start sont bien placé en premier de chaque page c'est donc bien bizarre

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Bon décidément ce n'est vraiment pas clair pour moi pourrais tu mettre distinctement le code et le nom de chaque page ?

    Désolé je dois être un peu fatigué
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    ok pas de soucis :


    login.php ( la page de traitement des login et ouverture de sessions )
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?session_start();
     
    //require('logout.php');
    // On écrase le tableau de session
    // s'il y une session on l'ecrase
     
    /*
    if(isset($_SESSION['login'])  ) {
    
    
    $_SESSION = array();
    
    // On détruit la session
    session_destroy();
    
    }*/
    require('connexion.php');
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['mdp'])) {
     $login = $_POST['login'];
     $mdp = $_POST['mdp'];
     
      // on recupère le password de la table qui correspond au login du visiteur
      $sql = "select * from Membres where login='".$login."'";
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
      $data = mysql_fetch_assoc($req);
     
      $droits = $data['droits'];
     
     
     
     
      if  ($data['mdp'] != $mdp) { //||  ( empty($data) ) )  {
    			    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    				 $_SESSION['login'] = "corrupted";
    				$_SESSION['droits'] = "corrupted";
     
    			    require('index.php'); // On inclut le formulaire d'identification
    			   exit;
    			  }
    		 else {
     
     
     
    		    $_SESSION['login'] = $login;
     
    			$_SESSION['droits'] = $droits;
    			$_SESSION['id'] = session_id();
     
     
     
     
    			if ( strcmp($droits,"admin") == 0 )
    			{    
     
    				header("Location:indexa.php");
    				}
    			else 
    				{
    					header("Location:indexuser.php");
    				}
     
     
     
     
     
    		  }   
    }
    else {
      echo '<p>Vous avez oublié de remplir un champ.</p>';
       require('index.php'); // On inclut le formulaire d'identification
       exit;
    }
     
     
    ?>


    index.php ( la page de login )
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
     
     
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Apoca Processus</title>
     
    <script type="text/javascript" src="Ressources/dojo.js"></script>
    <script language="JavaScript" type="text/javascript">
    	dojo.require("dojo.event.*");
    	dojo.require("dojo.widget.LayoutContainer");
    	dojo.require("dojo.widget.LinkPane");
    	dojo.require("dojo.widget.ContentPane");
    	dojo.require("dojo.widget.Tree");
    	dojo.require("dojo.widget.TreeSelector");
    	dojo.require("dojo.widget.FloatingPane");
    	dojo.require("dojo.widget.Dialog");
    </script>
     
    <style>
    /*html, body {
    	height: 100%;
    	width: 100%;
    	overflow: hidden;
    }
    #main {
    	height:100%;
    	width: 100%;
     
    	position: relative;
    }*/
     
     
     
    </style>
    <LINK rel=stylesheet type="text/css" href="Ressources/style.css">
    </head>
    <body style="border: 1px solid black;">
    <div id="topMenu" dojoType="ContentPane" layoutAlign="top" class="header"
    	 style="padding-bottom: 5px;">
     
     
    		<!-- <div style="float: right;">
    			<button dojoType="Button"   onclick="dojo.widget.byId('options').show()"  >
    				Administration
    			</button>
    		</div>-->
     
    		<div align=center><img src='Apoca.jpg'></div>
     
    	</div>
     
    	<!-- bas de la page -->
     
    <div dojoType="SplitContainer"  sizerWidth="3" id="main" sizeMin="500" sizeShare="85" layoutChildPriority='left-right' >
    <div id ="bas">
     
    	 <div id="Droite"> <!-- style="background-color: #eeffff; width: 70%;">-->
    	<div dojoType="ContentPane"  sizeMin="20" sizeShare="20" layoutAlign="client" style="background-color: #eeffff;"
    		id="docpane" executeScripts="true">
    		<BR><B><center>Bienvenue sur APOCA Processus</B>
    		<br/>
    		<br/>
     
    			<form  method="post" id="form1" action="login.php">
    				<div class="formQuestion">
    						<span class="emphasise">Login </span>
     
    					</div>
    				<div class="formAnswer">
    						<input type="text" name="login" class="medium" value=""
    							dojoType="ValidationTextBox">
    					</div>
    					<div class="formQuestion">
    						<span class="emphasise">Mot de passe</span>
     
    					</div>
    				<div class="formAnswer">
    						<input type="text" name="mdp" class="medium" value=""
    							dojoType="ValidationTextBox">
    					</div>
    				</form>
    					<button dojoType="Button" onclick="dojo.byId('form1').submit();">Valider</button>
     
    	 pour l'instant , <br/>compte admin  : login/mdp =<br/> apoca/apoca<br/>
    	 <br/>compte normal  : login/mdp =<br/> user1/user1<br/>
    	 user2/user2<br/>
    	 user3/user3<br/>
    	 user4/user4<br/>
     
     
    	</center>
    	</div>
     
     
    	</div>
    	</div>
     
    </div>
     
     
    	</div>
    	</div>
     
    </body>
    </html>

    indexa.php ( la page affiché une fois loggé )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <? session_start();
     
    echo $_SESSION['login'];
    echo $_SESSION['droits'];
     
     
    require('verifadmin.php');
     
    ?>
    <html>
    puis le reste de mon site..
     
    ?>

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Simple vérification : sur indexa.php il n'y a pas un saut de ligne avant l'ouverture des balises php ?

    Si oui tente de le supprimer. Sinon je ne vois pas
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Non malheuresement il n'y est pas

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Si j'ai bien compris la première fois ca fonctionne bien, et c'est quand tu fais un refresh que ca ne fonctionne plus.

    Peux tu détailler ce refresh ? (F5, un bouton, etc.)
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Ouép c'est bien ca un refresh avec F5, et puis si j'attribue une option dans ma page qui conduit a la rafraichir (formulaire etc..) c'est la même chose.

    j'ai deja testé sur plusieurs navigateurs et plusieurs machines.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    On va bien finir par trouver : sur quelle page appliques tu le refresh ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    sur l'indexa.php

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Joker je sèche.

    En relisant le message d'erreur on dirait que c'est un problème de droits d'accès...
    Si tu es sur un hébergeur autorise t'il les sessions ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

Discussions similaires

  1. [debutant] détecter page en cours
    Par hugo69 dans le forum Flash
    Réponses: 5
    Dernier message: 04/06/2008, 09h12
  2. Réponses: 3
    Dernier message: 09/01/2008, 22h19
  3. [C#] [Debutant] Problème <%@ Page et include
    Par LechucK dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/02/2007, 18h12
  4. Affichage du message précédent en début de page
    Par Eusebius dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 10/07/2006, 16h35
  5. [Debutant]Multi page sous sql serveur
    Par christophebmx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/11/2004, 17h23

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