[php+mysql+free]pb ouverture session

Résolu
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   -  
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

15 réponses

Utilisateur anonyme
 
je ne connais pas session_name('qcm');
mais cela ne devrait il pas etre apres le démarage de la session?
2
Utilisateur anonyme
 
as tu pensé à mettre un dossier "sessions" vide a la racine de ton ftp?
1
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
oui justement j'ai pensé a ca dessuite mais le dossier est bien créé
0
Utilisateur anonyme
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
Salut

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

Tchuss
0
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
<?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
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
Re

Fais voir le début de ta page index

Tchuss
0
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
<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
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
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
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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
Utilisateur anonyme
 
arf...toujours un truc con tfasson :)
0
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
héhé ^^ :)
0