Page 1 sur 1

Session n'autorise qu'un seul utilisateur

Posté : 21 oct. 2005, 20:25
par bunk
Bonsoir,

En fesans des test sur une partie de code php (Voir ici) je viens de me rendre compte que même si j'ai plusieurs utilisateur enregistré dans la table gesten_utilisateur je n'arrive a m'hautentifier qu'avec un seul compte, je me demandais si cela pouvait provenir du code php (page login.php, en amont la page index.php avec formulaire) :
<?php
// Démarage de la session
session_name('gesten');
session_start();
$loginOK = false;

// Insertion du fichier admin/conf/conf.php
include ("../../conf/conf.php");

// Sequence de verification pour la session

// Si login vide erreur = 0
			if(strlen(trim($_POST['pseudo'])) < 1) { 
			header("Location: ../../index.php?erreur=0"); 
			exit();
			} 

// Si mdp vide erreur = 1
			if(strlen(trim($_POST['mdp'])) < 1) { 
			header("Location: ../../index.php?erreur=1"); 
			exit();
			}

// Si tout est bon

// Recherche du mot de passe en fonction du pseudo
	$sql = "SELECT * FROM gesten_utilisateur WHERE PSEUDO = '".addslashes($pseudo)."'";
	$req = mysql_query($sql) or die('Impossible de séléctionner les données dans la table users');
 
// Vérification du pseudo
	if (mysql_num_rows($req) > 0) {
    $data = mysql_fetch_assoc($req);
   
if ($mdp == $data['MOT_DE_PASSE']) {
      $loginOK = true;
    }
  }

// Pseudo validé alors mise en cache de l'ID_UTILISATEUR
    if ($loginOK) {
    
$sql2 = "SELECT g5.DROIT_GROUPE
FROM
gesten_utilisateur as g1,
gesten_utilisateur_groupe2 as g2,
gesten_utilisateur_groupe as g3,
gesten_utilisateur_groupe_droit as g4,
gesten_utilisateur_droit as g5

WHERE g1.PSEUDO ='".$pseudo."'
AND g1.ID_UTILISATEUR = g2.ID_UTILISATEUR
AND g2.ID_GROUPE = g3.ID_GROUPE
AND g3.ID_GROUPE = g4.ID_GROUPE
AND g4.ID_DROIT = g5.ID_DROIT";
$req2 = mysql_query($sql2) or die('Impossible de visualiser les droits');

// Création de la boucle qui stoque le/les droit(s) de l'utilisateur
        while($data2 = mysql_fetch_array($req2))
        {        
           $droit_groupe .= $data2['DROIT_GROUPE']." "; // Séparation par << espace >>
        }
		
// Mise en cache des variables de sessions    
    $_SESSION['id'] = $data['ID_UTILISATEUR'];
    $_SESSION['pseudo'] = $data['PSEUDO'];
    $_SESSION['mail'] = $data['MAIL'];
    $_SESSION['droit_groupe'] = $droit_groupe;

// Redirection vers le menu.php
header("Location: ../../index2.php"); 

} else {
// Si verification mauvaise erreur = 3
header("Location: ../../index.php?erreur=3");
}
?>
ou de la table en elle même :

Code : Tout sélectionner

CREATE TABLE `gesten_utilisateur` ( `ID_UTILISATEUR` int(11) NOT NULL auto_increment, `NOM` varchar(25) NOT NULL default '', `PRENOM` varchar(25) NOT NULL default '', `MOT_DE_PASSE` varchar(30) NOT NULL default '', `PSEUDO` varchar(30) NOT NULL default '', `MAIL` varchar(30) NOT NULL default '', PRIMARY KEY (`ID_UTILISATEUR`) ) TYPE=MyISAM AUTO_INCREMENT=26 ;
Si vous pouvez m'aider, merci d'avance

Posté : 21 oct. 2005, 21:14
par Truc
Salut, les variables $mdp et $pseudo viennent d'où ?
$pseudo= isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mdp    = isset($_POST['mdp'])     ? $_POST['mdp']     : NULL;
ensuite htmlentities() et addslashes(). Puis quand tu aura besoin de ces variables dans le script tu fait appel a $pseudo et $mdp et plus aux variables POST.

puis pourquoi faire un choix de données (requete) QUE sur le pseudo ( si plusieurs utilisateurs ont le meme pseudo tu va inutilement avoir plusieur enregitrements a lire, remplace par:
$sql = "SELECT * FROM gesten_utilisateur WHERE PSEUDO = '".$pseudo."' AND MOT_DE_PASSE='".$mdp."'";
$req = mysql_query($sql) or die('Impossible de séléctionner les données dans la table users');

if (mysql_num_rows($req) == 1) //si un utilisateur correspond a ce passe et pseudo
{
    $data = mysql_fetch_assoc($req);
    $loginOK = true; 
    // ICI tout le traiement de la session
}
apres ça verifi les données de session si elles correpondent au donné de l'uilisateur si c'est le cas le probleme vient d'ailleur.

Posté : 21 oct. 2005, 21:43
par bunk
Merci ca a l'air de mieux fonctionner, mis a part que si je change d'utilisateur il garde les groupes de l'utilisateur précedent et ajoute ceux du nouveau, faut que test encore.

Posté : 21 oct. 2005, 22:06
par bunk
bon ben j'ai fais comme ca et maintenant ca affiche la bonne liste des droits, ca n'incremente plus :
<?php
session_name('gesten');
session_start();
// Remise à zéro de la liste des groupes
$droit_groupe = "";
$loginOK = false;
Merci Truc !!!!

Posté : 21 oct. 2005, 22:10
par Truc
j'allais te le proposer, mais bon puisque tu as trouvé toi meme c'est beaucoup mieux :D

(ca doit venir du faite que le register_global est a "on" et donc tu garde en mémoire la valeur de des droits précédents dans la variable $droits_goupe)

C'est [Résolu] alors ?

Posté : 21 oct. 2005, 22:13
par bunk
Oui pardon !

merci

Posté : 21 oct. 2005, 22:13
par Truc
de rien, y a pas de quoi :wink: