[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 -
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 :
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
A voir également:
- [php+mysql+free]pb ouverture session
- Word 2013 free download - Télécharger - Traitement de texte
- Zimbra free - Guide
- Mysql community server - Télécharger - Bases de données
- Free office - Télécharger - Suite bureautique
- Sketchup free - Télécharger - 3D
15 réponses
je ne connais pas session_name('qcm');
mais cela ne devrait il pas etre apres le démarage de la session?
mais cela ne devrait il pas etre apres le démarage de la session?
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!
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<?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 :
puis dans session_verif.php, voila ce que j'ai mis :
// 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
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 ...
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 :
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 ^_^
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 ^_^