8791 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un problème de variable de session, en effet la variable $_SESSION['pseudo'] qui possède une valeur correcte a l'affichage de ma page apres le premier indentification, perd sa valeur lors d'un changement de page a sur le site meme.
quelqu’un saurait-il comment empêcher cela?
En vous remerciant.

Le code en question:
index.php

<?
		session_start() ;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<!-- titre -->
<title>Projet PHP</title>
<!-- Lien du css -->
<link href="css/index.css" rel="stylesheet" media="screen" type="text/css" title="design" />
<!-- Auteur de la page -->
<meta name="author" content="David, Matias et Remi" />
<!-- Description de la page -->
<meta name="description" content="Site web pour projet PHP" />
<!-- Mots-clés de la page -->
<meta name="keywords" content="Projet, Site, Web, Dynamique" />
<!-- Adresse de contact -->
<meta name="reply-to" content="hastaran.matias@gmail.com" />
<!-- Icône du site  -->
<link rel="shortcut icon" type="image/x-icon" href="" />
</head>
<body>
<?
//inclusion de l'objet
include ("objet/class_connect.php");
?>
<div id="fond">
<div id="header"></div>
<div id="menugauche">
<div id="menugauchehaut"></div>
<div id="menugauchemilieu">
<div id="textesmenus">
<a href="index.php?page=fofo">fofo</a><br/>
<a href="index.php?page=">acceuil</a><br/>
<?include ("login.php") ;?>
</div><!-- fermeture du div textesmenus -->
</div><!-- fermeture du div menugauchemilieu -->
</div><!-- fermeture du div menugauche -->
</div>
<div id="corp">
	<?
	if ($_GET['page'] == "fofo")
    {
        include("forum.php");
    }
?>
</div>
<div id="menudroit">
<div id="menudroithaut"></div>
<div id="menudroitmilieu">
<div id="textesmenus">
<?
echo $_SESSION['pseudo'];
echo $_SESSION['logged'];
?>
</div><!-- fermeture du div textesmenus -->
</div><!-- fermeture du div menudroitlilieu -->
</div><!-- fermeture du div menudroit -->
</div><!-- fermeture du div fond -->
</body>
</html>


Le code de la page de login (login.php)


<html>
<head>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design/login.css" />
</head>
<body>
<?	
if (((isset ($_SESSION['logged']) AND  $_SESSION['logged'] == true)) OR ((isset($_POST['pseudo']) AND isset($_POST['mot_passe']))))
{
		$bdd_connect = new bdd_connect();
		$bdd_connect -> connect();
        if (!empty($_POST['pseudo']) && !empty($_POST['mot_passe']) OR ((isset ($_SESSION['logged']) AND  $_SESSION['logged'] == true)))
        {		 
				$pseudo2 = $_SESSION['pseudo'];
                $pseudo = htmlspecialchars($_POST['pseudo']);
                $mot_passe = htmlspecialchars($_POST['mot_passe']);
                $sql = mysql_query("SELECT * FROM user WHERE login='" . $pseudo . "'");
				$sql2 = mysql_query("SELECT * FROM user WHERE login='" . $pseudo2 . "'");
				$verif = mysql_fetch_array($sql);
				$verif2 = mysql_fetch_array($sql2);
				$bdd_connect->close();
                if ($verif != NULL OR $verif2 != NULL)
                {	 
                     if ($verif['pass'] == $mot_passe OR ((isset ($_SESSION['logged']) AND  $_SESSION['logged'] == true)))
                        {
							$_SESSION['pseudo'] = $pseudo;
							$_SESSION['logged'] = true;
														?>
							<div id="titre">Bonjour <? echo $_SESSION['pseudo']; ?>. </div><br/>
							<div id="corp2">Nous somme le <?  echo date('d/m/Y'); ?>.<br/>
							Il est <? echo date('H'); ?>:<? echo date('i'); ?>.
							<?
							
					  }
                        else
                                {echo 'Erreur : le mot de passe est incorrect !'; }
                }
                else
                        {echo "Erreur : le pseudo n\'existe pas !";  }
        }
        else
                {echo "Erreur : veuillez remplir tous les champs !";  }
}  
else
{
?>
			 <form method="post" action="index.php">
			 <p>
			 <label for="pseudo">Pseudo : <input type="text" name="pseudo" id="pseudo" /></label>
			 <label for="mot_passe">Mot de passe : <input type="password" name="mot_passe" id="mot_passe" /></label>
			 <input type="submit" name="connexion" value="Se connecter" /> </p>
			 </form> 
			<?
}			 
			 ?>
</body>
</html>


Exemple de l'une des pages chargées:

forum.php


<html>
<head>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design/forum.css" />
</head>
<body>
<?
//connection a la bdd
$bdd_connect = new bdd_connect();
$bdd_connect -> connect();
//recuperation des données
$cat = mysql_query("SELECT id, nom FROM forum_cat");
while($cat2 = mysql_fetch_array($cat))
{
?>
<b><? echo $cat2['nom']?></b><br/>
<?
$sscat = mysql_query("SELECT id, titre FROM forum_sscat WHERE id_cat ='". $cat2['id'] ."'");
while($sscat2 = mysql_fetch_array($sscat))
{
?>
<a href="topic.php?sscat=<? echo $sscat2['id']?>"><? echo $sscat2['titre']?><br/></a>
<?
}
}
//cloture de la session mysql
$bdd_connect->close();
?>
<? echo $_SESSION['pseudo']; ?>
<body>
</html>

Modifié par zurim (10 Jul 2007 - 10:43)
Il me semble qu'il faille préciser qu'une session est ouverte en début de chaque page utilisant des sessions, tu l'as bien fait ?
Modifié par Ondskapt (09 Jul 2007 - 14:31)
Ben les pages etant incluse dans l'index.php ou la variable de session est ouverte, cela devrait fonctionner non?
Enfin j'ai testé avec mais rien ne change ...
Ca fait un bail que je n'ai plus utilisé de sessions mais y'avait une histoire avec l'enregistrements de variables et


$_SESSION['pseudo'] = $pseudo;


par exemple n'était plus censé fonctionner et devait être remplacé par


session_register("pseudo");


Tu rappelais ensuite les variables avec $_SESSION['nom_de_la_variable']. je ne sais plus si c'est une histoire de version de PHP ou de config serveur.
Modifié par Ondskapt (09 Jul 2007 - 14:55)
Il me semble avoir tester avec les session_register mais je vais retester au cas ou...
Salut zurim Smiley cligne ,

je pense que le problème vient de ce que tu ne fais pas les include comme il faut : les pages ne devraient pas contenir de balises <html> ou <body> (cf. cette page). Du coup le session_start ne fonctionne pas et tes variables sont inaccessibles...

A+
a écrit :

Ca fait un bail que je n'ai plus utilisé de sessions mais y'avait une histoire avec l'enregistrements de variables et

$_SESSION['pseudo'] = $pseudo;

par exemple n'était plus censé fonctionner et devait être remplacé par

session_register("pseudo");

Tu rappelais ensuite les variables avec $_SESSION['nom_de_la_variable']. je ne sais plus si c'est une histoire de version de PHP ou de config serveur.


il est plutot recommandé depuis PHP 4.1.0 d'utiliser la superglobal $_SESSION qui est elle indépendante de la configuration de PHP.
Le tout est en tout cas de ne pas mélanger les 2 .
Bonjour,
Bon j'ai supprimer toutes les balises <html> <head> et <body> des includes ... mais rien ne change.
Je vais revoir mon login.php il y a peut etre une erreur dedans...

Je garde aussi les variables $_SESSION.
Oui c'est etrange que cela ne marche pas car si tu as enlevé les balise html et body des pages insere normalement ça devrai marcher.
Et quand tu te logue une 1er fois cela fonctionne bien ? la variable $_SESSION et bien afficher partout ?

Sinon pour ton identification il est preferable de ne pas separer mauvais mot de passe et mauvais login, car après cela est plus facile pour essyer de recupere un compte. Enfin c'est un simple detail.

Edit : Regarde ta page login.php tu as trop de teste inutile tu pourrais en enlever pas mal en mettant une bonne architecture car la j'arrive pas a suivre le chemin des variables Smiley sweatdrop , donc sans doute que a un moment tu reinitialises tes variables, peut etre.
Modifié par Halindel (10 Jul 2007 - 10:40)
J'ai reussi Smiley biggrin le probleme venait bien de la page login.php.
Voila la nouvelle:


<?
if (isset($_SESSION['logged']) AND ($_SESSION['logged'] == 1))
{	?>
	
	<div id="titre">Bonjour <? echo $_SESSION['pseudo']; ?>. </div><br/>

	<div id="corp2">Nous somme le <?  echo date('d/m/Y'); ?>.<br/>

	Il est <? echo date('H'); ?>:<? echo date('i'); ?>.

	<?
}
elseif (((isset($_POST['pseudo']) AND isset($_POST['mot_passe']))))

{

		$bdd_connect = new bdd_connect();

		$bdd_connect -> connect();

        if (!empty($_POST['pseudo']) && !empty($_POST['mot_passe']))

        {		 

				$pseudo2 = $_SESSION['pseudo'];

                $pseudo = htmlspecialchars($_POST['pseudo']);

                $mot_passe = htmlspecialchars($_POST['mot_passe']);

                $sql = mysql_query("SELECT * FROM user WHERE login='" . $pseudo . "'");

				$verif = mysql_fetch_array($sql);

				$bdd_connect->close();

                if ($verif != NULL)

                {	 

                     if ($verif['pass'] == $mot_passe)

                        {

							$_SESSION['pseudo'] = $pseudo;

							$_SESSION['logged'] = true;

														?>

							<div id="titre">Bonjour <? echo $_SESSION['pseudo']; ?>. </div><br/>

							<div id="corp2">Nous somme le <?  echo date('d/m/Y'); ?>.<br/>

							Il est <? echo date('H'); ?>:<? echo date('i'); ?>.

							<?

							

					  }

                        else

                                {echo 'Erreur : le mot de passe est incorrect !'; }

                }

                else

                        {echo "Erreur : le pseudo n\'existe pas !";  }

        }

        else

                {echo "Erreur : veuillez remplir tous les champs !";  }

}  

else

{

?>

			 <form method="post" action="index.php">

			 <p>

			 <label for="pseudo">Pseudo : <br><input type="text" name="pseudo" id="pseudo" /></label><br>

			 <label for="mot_passe">Mot de passe : <br><input type="password" name="mot_passe" id="mot_passe" /></label><br>

			 <br><input type="submit" name="connexion" value="Se connecter" /> </p>

			 </form> 

<?

}			 

?>


Merci pour votre aide