Bonjour à tous,
voilà j'ai un problème avec des sessions, je suis sûr que la solution est simple mais étant donné que je suis débutant en PHP j'arrive pas à trouver.

J'ai donc une application dans laquelle je gère plusieurs groupes d'utilisateurs.
on va dire "grp1" et "grp2" et "admin"

PROBLEME : lorsque je ne suis pas connecté et que j'essaye de me connecter à une page protegée je peux pas : normal, ce qui me gène plus, c'est que lorsque un utilisateur du grp1 ou 2 est connecté il peux accéder à une page protegée de l'espace admin... et vice versa

Pour chaque groupe j'ai un formulaire de connexion spécifique pour "grp1" et "grp2" je récupère l'email et le mot de passe, et pour l'admin je recupère le login et le mdp depuis une page contenant un formulaire puis je les envoient vers une page connexion.php (exemple pour la partie admin) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
//démarrage de session
session_start();
 
//si la variable de session n'existe pas on la crée
if (!isset($_SESSION['logged'])) $_SESSION['logged'] = false;
 
//on inclut les fichiers de config
include("../config/config.inc.php");
 
//On verifie si les champs du fomulaire contenait quelque chose
	if (isset($_POST['login'], $_POST['mdp']) && !empty($_POST['login']) && !empty($_POST['mdp']))
	{	
		//récupération des données du formulaire
		$login = htmlentities(addslashes($_POST['login']));
		$mdp = htmlentities(addslashes($_POST['mdp']));
 
		//Hashage du mot de passe
		$mdp = md5($mdp);
 
		//Connexion à la base de données
		$db = mysql_connect("$sql_serveur", "$sql_login", "$sql_password");
		mysql_select_db("$sql_base",$db);
 
		//on verifie que le login existe vraiment
		$sql = mysql_query("SELECT COUNT(*) AS nb_login FROM admin WHERE login='".$login."'");
 
		//si il le résultat de la requette est différent de 0
		if (mysql_result($sql,0,'nb_login') != 0)
		{
			// on récupère l'ID et le mot de passe de l'utilisateur
			$sql_info = mysql_query("SELECT id, mdp FROM admin WHERE login = '$login'"); 
			$donnees_info = mysql_fetch_array($sql_info) or die();
 
			//si le mot de passe est bon
			if ($donnees_info['mdp'] == $mdp)
			{
				//on met à TRUE la variable globale qui nous indique si le membre est connecté.
				$_SESSION['logged'] = true;
 
				//création de la variable qui contient l'id de l'utilisateur
				$_SESSION['id'] = $donnees_info['id'];
 
				//redirection vers l'espace admin
				header("location: admin.php");
			}
			else
			{
			echo "mdp pas correct";
			}
		}
		else
		{
		echo "le compte n'existe pas";
		}
 
		//Deconnexion
		mysql_close($db);;
	}
	else
	{
	echo "z'avez oublié de remplir un champ";
	}
?>
Page sécurisée (admin.php) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?php
//on démarre la session
session_start();
 
//on vérifie que la variable $_SESSION['logged'] existe et vaut bien true.
if (isset($_SESSION['logged']) && $_SESSION['logged'] == true)
{
 
include("../config/config.inc.php"); 
 
etc.... etc....

voilà le fonctionnement est le meme pour les utilisateurs du "grp1" ou "grp2"


Là je me suis donc dit je vais créer une nouvelle variable dans connexion.php comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$_SESSION['login'] = $login;
une varibale contenant donc le login de l'admin

et dans admin.php
plutot que de faire ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (isset($_SESSION['logged']) && $_SESSION['logged'] == true)
je fait ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (isset($_SESSION['login'])
mais pour le coup plus rien n'est protégé

suis surement un boulet vous allez me dire mais je voit pas là....


Dernière question qui n'a rien a voir, le fait de faire un hashage du mot de passe avec md5 est vraiment une bonne protection (enfin c'est pas non plus les serveurs de la CIA,) je demande pas un cryptage sur 256 bits etc... mais un utilisateur lambda ne pourra pas récupérer le mot de passe ?


Merci d'avance à ceux qui aurront pris le temps de se pencher sur mon problème et qui pourront m'aiguiller