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

PHP & Base de données Discussion :

Gestion des sessions php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut Gestion des sessions php
    Bonjour,

    J'ai développé un outil en PHP/MySQL sécurisé par une session unique.
    C'est à dire qu'il y a un utilisateur et un mot de passe unique pour entrer dans mon outil. Et j'aimerais savoir comment créer un 2e utilisateur mais qui n'aurait accés qu'à 1 seule page de mon outil !

    Voici mes codes :

    login.php :

    Code php : 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
    <?php
    // On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
    $login_valide = "OAPTHD";
    $pwd_valide = "pilotage";
     
    // on teste si nos variables sont définies
    if (isset($_POST['login']) && isset($_POST['pwd'])) {
     
    		// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
    		if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
    				// dans ce cas, tout est ok, on peut démarrer notre session
     
    				// on la démarre :)
    				session_start ();
    				// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
    				$_SESSION['login'] = $_POST['login'];
    				$_SESSION['pwd'] = $_POST['pwd'];
     
    				echo '';
     
    				// on redirige notre visiteur vers une page de notre section membre
    				echo '<meta http-equiv="refresh" content="0;URL=index2.php">';
     
    		}
    		else {
    			// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
    			echo '<body onLoad="alert(\'Pas Possible.\')">';
    			// puis on le redirige vers la page d'accueil
    			echo '<meta http-equiv="refresh" content="0;URL=index.php">';
    		}
    }
    else {
    		echo 'Les variables du formulaire ne sont pas déclarées.';
    }
    ?>

    session.php :

    Code php : 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
    <?php
    // On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
    session_start ();
     
    // On récupère nos variables de session
    if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
     
    		// On teste pour voir si nos variables ont bien été enregistrées
    		// On affiche un lien pour fermer notre session
    		// echo '<a href="/logout.php">Déconnection</a>';
    		echo '';
    }
    else {
    		echo 'Les variables ne sont pas déclarées.';
    		header("Location:/index.php");
    }
    ?>


    Comment puis-je modifier ces scripts pour que sur une page de mon outil, un autre compte (et évidemment le principal aussi) ait accès, mais que ce compte n'est accès à rien d'autre.

    Merci d'avance!

    Steven.

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    salut ; tu peut ajouté un champ dans la table exemple droit , privilége ou autres... .
    1 accès a tous le site,
    2 accès a une partie..... c'est a toi de voir......

  3. #3
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Je n'ai pas de table pour mes sessions pour le moment =/ tout est géré en PHP !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    Donc le mieux, c'est de déclarer ton deuxieme utilisateur comme le premier.

    Et ensuite dans les pages que l'utilisateur 2 ne doit pas voir, tu controle si c'est l'utilisateur 1 ou 2 puis tu affiches selon l'utilisateur.

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Il faut équiper tes comptes d'une gestion de droits, pas besoin d'aller bien loin, les mettre dans un groupe fera l'affaire.

    Je te propose d'utiliser des fichiers INI de structure simple pour gêrer les utilisateurs et les droits. On va se servir d'une série de fonctions qui vont nous mâcher le travail. voici concrètement à quoi ça ressemble:

    users.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [users]
    foo = 'acbd18db4cc2f85cedef654fccc4a4d8' ;md5('foo')
    foo.group = 'admin'
     
    bar = '37b51d194a7513e45b56f6524f2d51f2' ;md5('bar')
    bar.group = 'user'
     
    [groups]
    admin = 3
    super-user = 2
    user = 1
    auth.php
    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
    <?php
     
    // conserver les droits dans une variable
    // statique de cette fonction permet aux
    // fonctions plus bas de les utiliser
    // sans passer par des variables globales
    //
    // Si cette fonction est appellée sans
    // paramètres, elle renvoie le tableau
    // des utilisateurs et des droits (tel
    // que défini dans users.ini par exmeple)
    //
    // Si cette fonction est appellée avec
    // un paramètre, sa valeur sera conservée
    // et pourra être restituée si on appelle
    // rights() sans paramètres
    function rights () {
        static $users;
        return func_num_args() ? $users = func_get_arg(0) : $users;
    }
     
    // vérifie qu'un utilisateur (identifié
    // par son nom) existe
    function user_exists ($user) {
        $users = rights();
        return isset($users['users'][$user]);
    }
     
    // vérifie le mot de passe d'un utilisateur
    // (le mot de passe est passé en clair)
    function check_password ($user, $password) {
        $users = rights();
        return isset($users['users'][$user]) && md5($password) == $users['users'][$user];
    }
     
    // obtenir le groupe d'un utilisateur
    function get_user_group ($user) {
        $users = rights();
        return isset($users['users']["{$user}.group"]) ? $users['users']["{$user}.group"] : null;
    }
     
    // vérifie que le groupe de l'utilisateur
    // est bien supérieur ou égal à $level
    function check_user_rights ($user, $level) {
        $users = rights();
        $user_group = get_user_group($user);
        if (isset($users['groups'][$level], $users['groups'][$user_group]))
            return $users['groups'][$user_group] >= $users['groups'][$level];
        return false;
    }
    init.php (le fichier de config commun)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    require_once dirname(__FILE__) . '/auth.php';
     
    if (!$users = parse_ini_file('users.ini', true))
        die('-- CRITICAL - CANNOT LOAD RIGHTS --');
     
    rights($users);
    Ensuite, il ne nous reste qu'a mettre en place le formulaire de login:
    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
    <?php
    require_once dirname(__FILE__) . '/init.php';
     
    if (isset($_POST['connect'])) {
     
        $login    = filter_input(INPUT_POST, 'login',    FILTER_SANITIZE_STRING);
        $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
     
        if (!$login || !user_exists($login))
            $message = "Login invalide";
        elseif (!$password || !check_password($login, $password))
            $message = "Mot de passe invalide";
        else {
            session_start();
            $_SESSION['logged_user'] = $login;
            header("Location: page1.php");
        }
    }
     
    ?>
    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
    </head>
    <body>
        <?php if (isset($message)): ?>
        <p class="error"><?php echo $message ?></p>
        <?php endif ?>
        <form action="login.php" method="post">
            <fieldset>
                <legend>Veuillez vous authentifier</legend>
                <div>
                    <label>Identifiant</label>
                    <input type="text" name="login" />
                </div>
                <div>
                    <label>Mot de passe</label>
                    <input type="password" name="password" />
                </div>
            </fieldset>
            <div>
                <input type="submit" value="Se Connecter" name="connect" />
            </div>
        </form>
    </body>
    </html>
    Et on va utiliser ce snippet sur toutes les pages à sécuriser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    require_once dirname(__FILE__) . '/init.php';
    session_start();
     
    if (!check_user_rights($_SESSION['logged_user'], 'user')) {
        header("{$_SERVER['SERVER_PROTOCOL']} 403 Forbidden");
        die("Vous n'avez pas acc&egrave;s &agrave; cette ressource");
    }
     
    echo "Acc&egrave;s autoris&eacute; !";
    Je te mets le Zip en pièce jointe. N'hésite pas si tu as des questions.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    super ça marche !

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour la postérité et les générations futures, tu peux nous décrire comment tu t'en est sorti ? Histoire que ça profite à tout le monde

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    salut ; donc entre les deux méthodes , qu'elle est la meilleur solution pou géré ce cas de figure ?

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Disons que j'aurais tendance à préférer l'approche par groupe qui est à la fois simple et naturelle (c'est pas pour rien qu'Unix fonctionne comme . L'inconvénient de la solution qui consiste à déterminer les droits selon le nom d'utilisateur est certes plus flexible car on peut choisir avec finesse quelles pages autoriser ou non. Mais on a rarement besoin d'une telle finesse.

  10. #10
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    En fait, de mon coté comme j'avais besoin de 2 users seulement, j'ai fais une approche beaucoup plus simple. J'ai juste repris le principe de mon premier User pour le copier et j'adapte l'include en fonction de la page à afficher.

    session_2.php :

    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
    <?php
    // On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
    session_start ();
     
    // On récupère nos variables de session
    if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
     
    	echo '';
    }
    elseif (isset($_SESSION['login_itc']) && isset($_SESSION['pwd_itc'])) {
     
    	echo '';
    }
    else {
    		echo 'Les variables ne sont pas déclarées.';
    		header("Location:/index.php");
    }
    ?>
    login :

    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
    <?php
    // On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
    $login_valide = "OAPTHD";
    $pwd_valide = "pilotage";
     
    $login_valide_itc = "OAPITC";
    $pwd_valide_itc = "itc1234";
     
    // on teste si nos variables sont définies
    if (isset($_POST['login']) && isset($_POST['pwd'])) {
     
    		// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
    		if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
    				// dans ce cas, tout est ok, on peut démarrer notre session
     
    				// on la démarre :)
    				session_start ();
    				// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
    				$_SESSION['login'] = $_POST['login'];
    				$_SESSION['pwd'] = $_POST['pwd'];
     
    				echo '';
     
    				// on redirige notre visiteur vers une page de notre section membre
    				echo '<meta http-equiv="refresh" content="0;URL=index2.php">';
     
    		}
    		elseif ($login_valide_itc == $_POST['login'] && $pwd_valide_itc == $_POST['pwd']) {
    			// dans ce cas, tout est ok, on peut démarrer notre session
     
    			// on la démarre :)
    			session_start ();
    			// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
    			$_SESSION['login_itc'] = $_POST['login'];
    			$_SESSION['pwd_itc'] = $_POST['pwd'];
     
    			echo '';
     
    			// on redirige notre visiteur vers une page de notre section membre
    			echo '<meta http-equiv="refresh" content="0;URL=index2.php">';
     
    		}		
    		else {
    			// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
    			echo '<body onLoad="alert(\'Pas Possible.\')">';
    			// puis on le redirige vers la page d'accueil
    			echo '<meta http-equiv="refresh" content="0;URL=index.php">';
    		}
    }
    else {
    		echo 'Les variables du formulaire ne sont pas déclarées.';
    }
    ?>

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    Je pense aussi que c'est la solution la plus simple pour l'ampleur du site.

    La méthode de Benjamin est très bien aussi mais pour un site plus grand ou plus professionel à mon gout.

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

Discussions similaires

  1. Gestion des sessions php sous debian
    Par blast078 dans le forum Administration système
    Réponses: 3
    Dernier message: 18/02/2008, 17h40
  2. [Struts][JSP]gestion des session en JSP
    Par zola dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/04/2006, 16h23
  3. Mécanisme des sessions PhP
    Par segphault dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2006, 13h54
  4. gestion des sessions
    Par jeff_! dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 22h09
  5. [tomcat] gestion des sessions
    Par sebos63 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/10/2004, 14h25

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