IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

problème : plusieurs session sur un site


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut problème : plusieurs session sur un site
    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

  2. #2
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Si j'ai bien compris ton problème;

    Il faudrait faire une nouvelle variable de session qui contient le rang du client (gr1,gr2 ou admin). Il faut, par conséquence, rajouter un champ dans ta base de donnée.

    Sur admin.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_SESSION['rang'])&&($_SESSION['rang']=='admin')){
    ...
    ...
    }
    Sur page.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_SESSION['rang'])&&($_SESSION['rang']=='gr1')){
    ...
    ...
    }
    En général, c'est comme ça qu'on fait,...

    Pour le hashage md5, c'est assez sûr. Mais il paraitrait que md5 est cracké...donc, à la place, tu as sha1 qui fonctionne de la même manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash=sha1("my string");
    @+

  3. #3
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    ça marche, merci beaucoup l'ami ! j'ai passé du temps à essayer de trouver une solution et tu m'as bien aidé.

    Et merci pour tes précisions sur md5 je vais essayer sha1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de sessions sur 1 seul site
    Par david2511 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 30/01/2014, 11h24
  2. Problème de session sur mon site
    Par mulot47 dans le forum Langage
    Réponses: 8
    Dernier message: 16/05/2008, 22h00
  3. Problème accès répertoire sur mon site
    Par rungis dans le forum Apache
    Réponses: 9
    Dernier message: 12/11/2007, 11h38
  4. [Blog] Plusieurs MiniBlogs sur mon site
    Par Davboc dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 12/07/2006, 18h50
  5. plusieurs sessions sur un même PC
    Par mouloudéen dans le forum Windows XP
    Réponses: 9
    Dernier message: 02/06/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo