[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 1468 Statut Contributeur -
Ohm-WorK Messages postés 1468 Statut Contributeur -
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 :
login.php :
session_verif.php : (que l'inclus dans toutes les pages situées apres l'authentification)
Voila je vois pas ou est le problème donc si vous avez des suggestions ... merci de me les faire savoir :p
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','$','î','ô','à','ç','ç','ê','è','é','é', 'è', 'ê', 'ë', 'â', 'à', 'ä', chr(156), chr(220), 'u', 'ù', 'ü', 'ö', 'ô', 'ç', 'ï', 'î', chr(63), '!', '@', '€',chr(128), '&', '&', '%', '#', '°', ',', ';', ':', '/', '(', ')', '\'', '"', '*', '+', ' ', '---', '--',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
-
je ne connais pas session_name('qcm');
mais cela ne devrait il pas etre apres le démarage de la session? -
-
oui justement j'ai pensé a ca dessuite mais le dossier est bien créé
-
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! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut
Essaye en mettant tes session_start() juste après le tag php.
Tchuss -
<?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 -
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(); ... ... -
-
<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> -
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
-
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 ... -
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 ^_^ -
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 -
-