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 :

Session membre / admin


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Par défaut Session membre / admin
    Bonjour.

    J'ai un petit problème de différenciation de connexion entre un simple utilisateur et un admin.
    En effet, j'aimerai que l'utilisateur lambda, lorsque celui-ci se connecte, arrive sur sa page personnel, alors que l'admin quant à lui, lorsqu'il se connecte, arrive sur un autre page.
    J'ai effectué différentes recherches sur l'inscription et la connexion d'un membre, enregistré dans une base de donnée. Mais je n'arrive pas à faire la différenciation entre un admin à qui j'ai un login spécial et un simple utilisateur. Le type de code est le suivant (il me semble l'avoir repris en partie de developpez.net) :

    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
    <?php
    	include("mabasededonne.php");
     
    	if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') 
    	{
     
    		if ((isset($_POST['login']) && !empty($_POST['login'])) 
    		&& (isset($_POST['pass']) && !empty($_POST['pass']))) {
     
    		connexion();
     
    		$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
    		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    		$data = mysql_fetch_array($req);
     
    		mysql_free_result($req);
    		mysql_close();
     
     
     
    		if ($data[0] == 1) {
    			session_start();
     
    			$_SESSION['login'] = $_POST['login'];
    			header('Location: membre.php');
    			exit();
    		}
     
     
    		elseif ($data[0] == 0) {
    			$erreur = 'Votre compte ou votre mot de passe est incorrect.';
    		}
     
    		else {
    			$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    		}
    	}
    	else {
    		$erreur = 'Au moins un des champs est vide.';
    	}
    }
    ?>
    J'ai essayé de rajouter la condition suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    		if ($data[0] == 1) {
    			session_start();
     
    			$_SESSION['login'] = 'admin';
    			header('Location: admin.php');
    			exit();
    		}
    ?>
    Mais malheureusement il identifie l'admin comme un utilisateur normal, il ne fait pas attention à la seconde condition et prend que la première condition en compte.

    Que faire, une idée ?

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    les clés uniques ça sert à quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    je comprends pas trop ce que tu veux faire? parce que ceci n'as aucune chance de fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		if ($data[0] == 1) {
    			session_start();
     
    			$_SESSION['login'] = $_POST['login'];
    			header('Location: membre.php');
    			exit();
    		}
    		if ($data[0] == 1) {
    			session_start();
     
    			$_SESSION['login'] = 'admin';
    			header('Location: admin.php');
    			exit();
    		}
    pourquoi le session_start() n'est-il pas fait systématiquement ? ça te permettrait de "suivre" des utilisateurs non identifiés, non ?

    pourquoi mysql_close(); ?

    j'aime bcp l'idée de faire un location(), par contre est-ce que tu penses au cas ou l'utilisateur écrit lui même "admin.php" dans son url ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Par défaut
    Oui c'est vrai que je n'avais pas remarqué la clé unique qui pour le coup est effectivement inutile.

    En gros le problème semble sans doute simple pour toi, mais compliqué pour moi ^^. Ca fait pas depuis bien longtps que je me suis mis au php, il y a certaines choses que je ne maitrise pas encore très bien.
    La condition que je voudrais c'est :
    Si on voit que c'est un utilisateur lambda, la personne est redirigée sur membre.php, si on voit que c'est un admin avec le login "admin", la personne est redirigée sur admin.php. C'est pour ca que je fais deux Locations. Mais je n'arrive pas à identifier l'un de l'autre pour que ces conditions fonctionnent. Je ne vois pas trop comment l'écrire.

    Et pour ce qui est de la "Location", j'ai fait des recherches pour modifier le nom du fichier de tel sorte à ce qu'il s'appel "admin.php" mais qu'il ait un nom de type "kjv&mlkjn=654sdf)àsdfj" dans la bar de recherche. Mais je n'ai rien trouvé de concret et de bien expliqué sur internet . Quelque chose qui pourrait crypter le nom en quelque sorte mais je ne sais pas si cela existe.

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    ce que je veux dire c'est qu'au début de admin.php, comme au début de toute tes pages, il faut executer une vérification de droits: tu peux avoir des droits qui sont liés a des actions utilisateurs, des pages (le plus simple), des groupes de page (des applications), par exemple un appel a "checkUserRigts(...);" à définir et qui vérifie que ton utilisateur a le droit d'être sur la page.

    sinon, ce que tu peux faire c'est interdire d'appeler une admin directement (interdire __FILE__ == $_SERVER['SCRIPTNAME'] ) et ne proceder que par include() dans un fichier index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ( $action=="membre" ){
    include 'membre.php';
    }
    elseif( $action =="admin" ){
    include 'admin.php'
    }
    elseif ($action == "planning")
    {
    ..
    }
    else {
    include 'welcome.php';
    }
    ce que je veux dire c'est que si tu fais une condition login trouvé alors membre et puis fin, tu ne peux pas continuer par loggin trouvé alors admin et puis fin.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Par défaut
    J'ai essayé avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!isset($_SESSION['xxx'])) {
    	header ('Location: logs.php');
    	exit();
    }
    Plus aucunes possibilités d'accéder via la barre de recherche à un autre fichier de type "*.php" sans se log avant, il redirige automatiquement vers le log. La vérification de droit marche nickel. Merci =)

    Il ne me manque plus que la différenciation entre un admin et un utilisateur .

  6. #6
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($data[0] == 1) /*ce test veux dire que le mot de passe est trouvé dans la base de donnée*/{
     
    	session_start();
    	$_SESSION['login'] = $_POST['login'];
    	if ($_SESSION['login'] == 'admin') {
    		header('Location: admin.php');
    	}
    	else {
    		header('Location: membre.php');
    	}
    	exit();
    }
    c'est pas compliqué pourtant.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Par défaut
    Effectivement tous fonctionne très bien en localhost merci beaucoup ! =)
    Par contre lorsque j'envoie le tout via FTP, et que je souhaite alors me connecter avec la session admin, j'ai une erreur de ce type :
    You don't have permission to access /admin.php on this server.

    Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
    J'ai supprimé tous les cookies ainsi que le cache en pensant que ça pourrait venir de là etc... Mais j'ai toujours le même message. Et je n'ai pas changé les droits d'accès au fichier.

Discussions similaires

  1. Réponses: 19
    Dernier message: 30/05/2009, 14h59
  2. [Sécurité] Différencier Lambda / Membre / Admin
    Par nicodn02 dans le forum Langage
    Réponses: 8
    Dernier message: 14/04/2007, 00h38
  3. [Sécurité] Pb PHP pour une session membre
    Par fredylover dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 09h59
  4. [Sécurité] probleme de session membre
    Par stomerfull dans le forum Langage
    Réponses: 8
    Dernier message: 09/12/2005, 15h14

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