Téléchargement
illégal
Posez votre question Signaler

[php+mysql+free]pb ouverture session [Résolu]

bezourox 710Messages postés 30 mars 2007Date d'inscription 3 avril 2012Dernière intervention - Dernière réponse le 13 juin 2007 à 16:56
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
Lire la suite 

[php+mysql+free]pb ouverture session »

15 réponses
Réponse
+2
moins plus
je ne connais pas session_name('qcm');
mais cela ne devrait il pas etre apres le démarage de la session?
Ajouter un commentaire
Réponse
+1
moins plus
as tu pensé à mettre un dossier "sessions" vide a la racine de ton ftp?
Ajouter un commentaire
Réponse
+0
moins plus
oui justement j'ai pensé a ca dessuite mais le dossier est bien créé
Ajouter un commentaire
Réponse
+0
moins plus
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!
Ajouter un commentaire
Réponse
+0
moins plus
Salut

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

Tchuss
Ajouter un commentaire
Réponse
+0
moins plus
<?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
Ajouter un commentaire
Réponse
+0
moins plus
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();
...
...
Ajouter un commentaire
Réponse
+0
moins plus
Re

Fais voir le début de ta page index

Tchuss
Ajouter un commentaire
Réponse
+0
moins plus
<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>
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ...
Ajouter un commentaire
Réponse
+0
moins plus
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 ^_^
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
arf...toujours un truc con tfasson :)
Ajouter un commentaire
Réponse
+0
moins plus
héhé ^^ :)
Ajouter un commentaire
Ce document intitulé « [php+mysql+free]pb ouverture session » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?