[php+mysql+free]pb ouverture session

Résolu
bonjour à vous tous .
Alors en fait j'ai un problème qui ne se posait pas lorsque je travaillais en local et qui se pose maintenant que j'ai tout mis sur mon ftp .

J'ai une page de login qui permet d'avoir accès à mon site .
Pour cela il suffit d'entrer un login et mot de passe correct .

Avant de vous montrer le code et mon problème, voila le principe de fonctionnement :

index.php -> login.php -> preambule.php(include "session_verif.php")

- index.php est la page ou l'on entre login et mot de passe
- login.php est le fichier qui connecte a la base de données et qui vérifie les infos rentrée
si log & mdp ok : alors on ouvre preambule.php
si log | mdp non valide : alors on reste sur index.php
- session_verif.php sert a vérifier pour chaque page qu'une session est ouverte

alors voila mon problème :

- quand sur index.php je rentre un login ou mot de passe incorrect, voila le résultat :
Login ou mot de passe incorrect !
- quand je rentre un login et mot de passe corrects, voila le résultat :
Vous devez vous authentifier !

voila les parties de code :

index.php :
Compte : <input type="text" name="login" size="20">
					Mot de passe : <input type="password" name="password" size="20"><p /><br />
					<?php
					if(isset($_GET["message"]))
					{
						if($_GET["message"] == "erreur") echo "<font color=red>Erreur de login ou mot de passe<p /></font>";
						else if($_GET["message"] == "no_session") echo "<font color=red>Vous devez vous authentifier !<br /></font>";
					}
					?>
					<input type="submit" name="submit" value="Connexion">


login.php :
<?php
// les variables ont bien été récupérées on se connecte donc à la bdd pour vérification du login et du mot de passe
mysql_connect("sql.free.fr", "prenom.nom", "motdepasse"); 
mysql_select_db("prenom_nom");
// si le formulaire d'authentification a été validé
	if ($_POST["valid_form"]) 
	{
		function protect($txt)
			{
				$suppr	= array('[',']','=','1','$','&icirc;','&ocirc;','&agrave;','&ccedil;','&ccedil;','&ecirc;','&egrave;','&eacute;','é', 'è', 'ê', 'ë', 'â', 'à', 'ä', chr(156), chr(220), 'u', 'ù', 'ü', 'ö', 'ô', 'ç', 'ï', 'î', chr(63), '!', '@', '€',chr(128), '&amp;', '&', '%', '#', '°', ',', ';', ':', '/', '(', ')', '\'', '"', '*', '+', ' ', '---', '--',chr(133),'<','>',chr(145),chr(146), '\\', chr(253), '²');
				$repl	= array('','','-','','','i','o','a','c','e','e','e','e', 'e', 'e', 'e', 'a', 'a', 'a', 'a', 'u', 'u', 'u', 'u', 'o', 'o', 'c', 'i', 'i', '', '', 'a', 'eur','eur', 'et', 'et', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-','-','','','','-','-', '2', '2');
				$txt	= str_replace($suppr, $repl, $txt);
				$txt	= preg_replace("#\A-*(.*?)-*\z#si","\\1",$txt);
				return strtolower($txt);
		}	
		$l_valid = protect($_POST["login"]);
		$p_valid = md5(trim($_POST["password"]));
		// on regarde dans la base si le login existe
		$res = mysql_query ("SELECT * FROM `t_login` WHERE `user_login` = '".$l_valid."'");
		// si un enregistrement corerspond a ce login
		if (@mysql_num_rows ($res) > 0) 
			{
				// on extrait ttes les infos de cet enregistrement
				$row = mysql_fetch_array ($res);
				// si le mot de passe correspond aussi
				if ($row["user_password"] == $p_valid) 
					{
						// on crée la session
						session_name('qcm');
						session_start();
						$_SESSION["id"] = $row["user_id"];
						$_SESSION["login"] = $row["user_login"];
						$_SESSION["abracadabra"] = "lapin_rose";
						// authentification reussie => accès à la page cachée
						header ("Location: preambule.php");	
					// sinon message de mot de passe faux
				} 
				else $err_mess = "erreur";
			// sinon message de login faux
		}
		else $err_mess = "erreur";
	}
// si l'authentification n'a pas reussi on retourne a la page de login avec message d'erreur
if ($err_mess != "") header ("Location: index.php?message=".$err_mess);
?>


session_verif.php : (que l'inclus dans toutes les pages situées apres l'authentification)
<?php
// les variables ont bien été récupérées on se connecte donc à la bdd pour vérification du login et du mot de passe
mysql_connect("sql.free.fr", "prenom.nom", "motdepasse"); 
mysql_select_db("prenom_nom");
// réouverture de la session
session_name('qcm');
session_start();
// on vérifie que la session est bien ouverte
if(isset($_SESSION["login"]) && isset($_SESSION["id"]) && isset($_SESSION["abracadabra"])) 
	{
		$id_valid = $_SESSION["id"];
		$l_valid = $_SESSION["login"];
		$res = mysql_query(" SELECT * FROM `t_login` WHERE `user_id` = '".$id_valid."' AND `user_login` = '".$l_valid."' ");
		if(@mysql_num_rows($res) == 0)
			{
				session_destroy();
				header("Location: index.php?message=no_session");
		}
		// si la session est différente des paramètres rentrés
		if($_SESSION["abracadabra"] != "lapin_rose")
			{
				session_destroy();
				header ("Location: index.php?message=no_session");
		}
}
// sinon on renvoi aussi à la page d'accueil
else header ("Location: index.php?message=no_session");
?>


Voila je vois pas ou est le problème donc si vous avez des suggestions ... merci de me les faire savoir :p
Configuration: Windows XP
Firefox 2.0.0.4

15 réponses

  1. je ne connais pas session_name('qcm');
    mais cela ne devrait il pas etre apres le démarage de la session?
    2
    1. as tu pensé à mettre un dossier "sessions" vide a la racine de ton ftp?
      1
      1. oui justement j'ai pensé a ca dessuite mais le dossier est bien créé
        0
        1. ouai c'est le genre de truc que je zapp et apres je cherche dans mon code pdt des heures ^^

          Dans session_verif.php

          met ton session_start(); en tout premier....

          c'est peut etre ça!
          0
          1. Contributeur
            Salut

            Essaye en mettant tes session_start() juste après le tag php.

            Tchuss
            0
            1. <?php
              // réouverture de la session
              session_name('qcm');
              session_start();
              // les variables ont bien été récupérées on se connecte donc à la bdd pour vérification du login et du mot de passe
              mysql_connect("sql.free.fr", "prenom.nom", "motdepasse"); 
              mysql_select_db("prenom_nom");
              
              // on vérifie que la session est bien ouverte
              if(isset($_SESSION["login"]) && isset($_SESSION["id"]) && isset($_SESSION["abracadabra"])) 
              	{...
                         ...
              


              Voila la modif effectuée .... et le résultat est le même :s
              0
              1. ben dans login.php, si login et mot de passe sont ok, alors :

                // on crée la session
                				session_name('qcm');
                				session_start();
                				$_SESSION["id"] = $row["user_id"];
                				$_SESSION["login"] = $row["user_login"];
                				$_SESSION["abracadabra"] = "lapin_rose";
                		// authentification reussie => accès à la page cachée
                				header ("Location: preambule.php");	


                puis dans session_verif.php, voila ce que j'ai mis :

                <?php
                // réouverture de la session
                session_name('qcm');
                session_start();
                ...
                ...
                0
                1. Contributeur
                  Re

                  Fais voir le début de ta page index

                  Tchuss
                  0
                  1. <html>
                    	<head>
                    		<title>Ouverture de session</title>
                    		<link rel="stylesheet" type="text/css" href="../css/css.css">
                    		<script type="text/javascript">
                    		function confirmation(frm)
                    			{
                    				var user_login = document.log.login.value;
                    				var user_password = document.log.password.value;
                    				var mess = "";
                    				if (user_login == "") mess += "ERREUR : Renseignez correctement le login. \n";
                    				if (user_password == "") mess += "ERREUR : Renseignez correctement le mot de passe. \n";
                    				if (mess != "") 
                    					{
                    						alert (mess);
                    						return false;
                    				}	
                    				else
                    					{
                    						return true;	
                    				}
                    		}
                    		
                    		</script>
                    	</head>
                    	<body><br />
                    	<div id="preambule">
                    		<form action="login.php" method="post" name="log" class="text" onsubmit="return confirmation(this)">
                    		<input type="hidden" name="valid_form" value="true" />
                    		<center><table border="0" cellspacing="0" width="60%" height="40%" class="cadre_sable_fonce">
                    			<tr>
                    				<td colspan="3"><br /><center><img src="../images/logo.jpg"></center><br /></td>
                    				
                    			</tr>
                    			<tr>
                    				<td class="text_centre"><br />
                    					
                    					Compte : <input type="text" name="login" size="20">
                    					Mot de passe : <input type="password" name="password" size="20"><p /><br />
                    					<?php
                    					if(isset($_GET["message"]))
                    					{
                    						if($_GET["message"] == "erreur") echo "<font color=red>Erreur de login ou mot de passe<p /></font>";
                    						else if($_GET["message"] == "no_session") echo "<font color=red>Vous devez vous authentifier !<br /></font>";
                    					}
                    					?>
                    					<input type="submit" name="submit" value="Connexion">
                    					<br />
                    				</td>
                    			</tr>
                    		</table></center>
                    	</div>
                    	</body>
                    </html>
                    0
                    1. Contributeur
                      Re

                      Bon, j'ai pas assez de recul pour voir ou ca merdouille.

                      Essaye de mettre des tests dans ton parcours. Les 2 cas ou tu as un retour en "no_session" sont :
                      if(@mysql_num_rows($res) == 0)
                      {
                      session_destroy();
                      header("Location: index.php?message=no_session");
                      }
                      // si la session est différente des paramètres rentrés
                      if($_SESSION["abracadabra"] != "lapin_rose")
                      {
                      session_destroy();
                      header ("Location: index.php?message=no_session");

                      Essaye de tester comme ca :
                      if(@mysql_num_rows($res) == 0)
                      {
                      echo 'bloqué cas 1';
                      session_destroy();
                      header("Location: index.php?message=no_session");
                      }
                      // si la session est différente des paramètres rentrés
                      if($_SESSION["abracadabra"] != "lapin_rose")
                      {
                      echo 'bloqué cas 2';
                      session_destroy();
                      header ("Location: index.php?message=no_session");
                      }

                      Tu saura comme ca ou ca bloque.

                      Tchusss
                      0
                      1. mouais j'avais déja essayé ca avant de balancer un post mais le probleme c'est qu'il n'affiche rien puisque ce fichier ne contient que du code .

                        je viens de le tester a nouveau et ca ne marche pas puisque session_verif n'affiche rien mais ne sert qu'a rediriger ...
                        0
                        1. tiens regarde meme ce que j'ai testé et qui ne marche pas :

                          if(isset($_SESSION["login"]) && isset($_SESSION["id"]) && isset($_SESSION["abracadabra"])) 
                          	{
                          		$id_valid = $_SESSION["id"];
                          		$l_valid = $_SESSION["login"];
                          		$res = mysql_query(" SELECT * FROM `t_login` WHERE `user_id` = '".$id_valid."' AND `user_login` = '".$l_valid."' ");
                          		if(@mysql_num_rows($res) == 0)
                          			{
                          				echo "cas1";
                          				session_destroy();
                          				header("Location: indexe.php?message=no_session");
                          		}
                          		// si la session est différente des paramètres rentrés
                          		if($_SESSION["abracadabra"] != "lapin_rose")
                          			{
                          				echo "cas2";
                          				session_destroy();
                          				header ("Location: indexee.php?message=no_session");
                          		}
                          }
                          // sinon on renvoi aussi à la page d'accueil
                          else header ("Location: indexeee.php?message=no_session");


                          les 3 headers qui renvoient a la page d'acceuil avec un message, j'ai mis des noms bidon ( indexe.php, indexee.php et indexeee.php) pour voir dans quelle boucle le programme s'engage, mais ca change rien, voila l'url qui s'affiche :

                          http://guillaume.priou.free.fr/taff/greta/qcm/index.php?message=no_session

                          Ce truc va me rendre chèvre ^_^
                          0
                          1. ne vous embétez pas, j'ai trouvé la solution .
                            c'est le fichier login.php placé a la racine de mon ftp qui etait exécuté et non celui placé dans le repertoire ou se trouve index.php .

                            Apparament c'était ca :)

                            Merci quand meme a vous
                            0
                            1. arf...toujours un truc con tfasson :)
                              0