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 :

page login obligatoire et limiter durée session


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut page login obligatoire et limiter durée session
    Bonjour,

    Comment faire pour interdire les utilisateurs de pointer directement sur les fichiers situés dans les sous-répertoires du site (ou même à la racine) sans s'authentifier au paravent ? Merci
    Je souhaiterai donc qu'ils passent obligatoirement par la page "login.php" et que toutes tentative d'ouverture des autres pages sans être passé par cette page "login.php" soient refusées ou bien soient redirigées vers la page "login.php".

    Merci pour votre rapide aide.

    PS : D'ailleurs est-il possible de limiter la durée des sessions ? Et comment faire ? Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour les pages php, il suffit d'ajouter au début du script une vérification de l'authentification de l'utilisateur et le rediriger le cas échéant.

    Pour les contenus, ils doivent être placés dans un repertoire interdit ; cela implique que leur lecture passe par un fichier .php intermediaire qui de même que pour le premier point, vérifie l'authentification et délivre le fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    OK Mais comment on fait ça ? Suis débutant et me perds pas mal dans tout ça.
    Et comme je l'ai rajouté tout à l'heure :

    PS : D'ailleurs est-il possible de limiter la durée des sessions ? Et comment faire ? Merci
    J'ai l'impression que les sessions durent indéfiniment et je pense que c'est ce qui pose pb sur mon site. Mais comme l'utilisateur ne clique par forcément sur "quitter" mais ferme son navigateur ou même le laisse ouvert pendant plusieurs heures....

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 37
    Points
    37
    Par défaut
    Salut,

    Pour le temps des sessions, je ne suis pas sur, mais je pense qu'il est possible de trouver ton bonheur dans ton fichier php.ini.

    En ce qui concerne tes accès aux pages souhaités, je ne connais pas la méthode que propose Sabotage (d'ailleurs, si tu veux la détailler, je serai bien preneur, parce que je ne sais pas le faire EN PHP). Par contre, chose que j'utilisais moi, c'est de commencer ta page par un session_start();
    Lorsque l'utilisateur se connecte, via la page de login, tu enregistres en session des informations de l'utilisateur, par exemple une concaténation de son identifiant en base de données, avec un autre champ.
    Sur chaque page où tu ne souhaites avoir que des utilisateurs connectés, avant d'afficher quoi que ce soit, tu démarres ta session, tu récupères le champs que tu as stocké à la connexion, et tu vérifie la véracité des informations avant d'afficher la page. Si il s'avère que ces données ne se trouvent pas en base de données, ou ne sont pas correctes, tu peux alors rediriger librement vers la page login.php.

    En espérant que cette aide t'aura été utile.

    Bulldo

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    En fait je fais bien un session_start() mais c'est ensuite que ça peche un peu.
    Je récupère bien certaines valeurs mais j'ai l'impression qu'elles sont toujours récupérées, même si l'utilisateur revient bcp plus tard en pointant directement la page, c'est justement ce qui me pose pb.
    Je ne sais pas si je me fais bien comprendre. Ce n'est pas simple à expliquer comme ça.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Par défaut, une session survit 24 minutes sans être utilisée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    bah c'est bizarre alors !!
    Il est clair que j'ai des pb dans mon code car on arrive à pointer directement les pages du site et récupérer les données nécessaires.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu arrives toi a acceder en dehors de ton authentification ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    Je viens d'ouvrir un nouvel onglet en pointant directement sur une page du site qui fait des recherche dans une BDD MySQL et j'ai bien les données recueillies. C'est bien ça le pb. En plus il n'y a QUE dans la page "login.php" que j'indique les paramètres de la BDD, sur toutes les autres pages je lis la variable $_SESSION['blabla']
    C'est pour ça que je ne comprends pas et c'est justement ce qui m'a mit la puce à l'oreille.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les onglets d'un navigateur utilisent la meme session pour un site.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    OK donc je viens de faire un nouvel essai,
    1) J'ouvre une session dans mon site donc page login.php qui ouvre page Accueil.php une fois authentifié.
    2) Je ferme navigateur
    3) J'ouvre navigateur
    4) je pointe directement sur la page "Accueil.php" (la page s'affiche mais sans les données dynamiques)
    5) Je choisi une des fonctionnalités de la page d'accueil (qui pointent sur sous-pages avec retour de données dynamique en tps normal)
    6) là j'ai toutes les erreurs liées à l'impossibilité de connexion à la base de données. C'est déja un bon point malgré que tous les renseignements sur les requêtes et connexions à la base de données soient affichées.
    Donc qd on ferme le navigateur ça semble fonctionner. mais qd le navigateur n'est pas fermé pendant plusieurs heures la navigation est totalement possible, c'est comme ça que je m'en suis rendu compte, je laisse mon navigateur tjrs ouvert pour effectuer les tests de mon site. Donc là par contre il y a un réel problème mais lequel je ne sais pas.

    Je viens de remarquer un truc aussi, les erreurs que j'ai eu tout à l'heure à propos de la connexion impossible à la BDD sont tout de même troublantes aussi. En effet, elles indiquent vraiment les coordonnées de la BDD (login, pwd, nom de la base, serveur, etc...) alors que ces données sont normalement indiquées par les variables $_SESSIONS. Ceci indique donc que les variables sont tout de même bien enregistrées et gardées en mémoire qq part. Et je pense que c'est probablement ça le pb d'ailleurs.
    D'ailleurs même en changeant de navigateur ça affiche la même chose, c'est assez troublant tout ça. Je dois avoir un pb dans mon code (c'est même sûr) mais quoi ?? aucune idée.

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sans voir ton code on ne peux pas te répondre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    Voici ma page "Login.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    <?php
    session_start();
    $sessionLogin = session_id;
     
    if ($_SESSION['SESSION_ID'] == $sessionLogin)
    {
    	session_unset();
    	session_destroy();
    }
     
    $serveur = "localhost"; //nom du serveur qui héberge la base
    $utilisateur = "USER";
    $pwd = "PWD";
    $base = "db_mabase"; //nom de la base de données
    $connexion = MySQL_connect($serveur, $utilisateur, $pwd);
    // Etablit la connexion, un identificateur de connexion est enregistré dans la variable $connexion
    mysql_select_db($base);
    // Définit la base par défaut. Ce n'est pas indispensable mais ça évite de spécifier la base à chaque requête.
     
    $_SESSION['ServeurMySQL'] = $serveur;
    $_SESSION['UtilisateurMySQL'] = $utilisateur;
    $_SESSION['PwdMySQL'] = $pwd;
    $_SESSION['BaseMySQL'] = $base;
    $_SESSION['ConnexionMySQL'] = $connexion;
     
    if( isset( $_POST['login'] ) && isset( $_POST['pwd'] ) )
    {
    	if( isset($_POST['connection'] ) )
    	{
    		$query = "SELECT u.Nom FROM t_Utilisateurs AS u WHERE u.login='".mysql_real_escape_string($_POST['login'])."' AND u.password='".md5($_POST['pwd'])."'";
    		$result = mysql_query($query) or die ("Erreur de requête de connexion : " . $query) ;
    		$count = mysql_num_rows($result);
    		if( $count === 1 )
    		{
    			$Resultat = mysql_result($result, 0, 0);
    			$_SESSION['NomUser'] = $Resultat;
     
    			$query = "SELECT u.GROUPE FROM t_Utilisateurs AS u WHERE u.Nom LIKE '$Resultat';";
    			$Resultat = mysql_query($query) or die("Erreur dans la requête : " . $query);
    			$NomGROUPE = mysql_result($Resultat, 0, 0);
    			$_SESSION['GROUPE'] = $NomGROUPE ;
     
    			$query = "SELECT u.ActualConnexion FROM t_Utilisateurs AS u WHERE u.login = '".mysql_real_escape_string($_POST['login'])."'";
    			$result = mysql_query($query) or die("Erreur de récupération de l'ancienne date du jour : " . $query);
    			$ResultatAncienneDate = mysql_result($result, 0, 0);
    			$_SESSION['AncienneDate'] = $ResultatAncienneDate;
     
    			$query = "UPDATE t_Utilisateurs SET LastConnexion = '$ResultatAncienneDate' WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
    			$result = mysql_query($query) or die("Erreur de transfert de la date " . $query);
     
    			$query = "UPDATE t_Utilisateurs SET ActualConnexion = CURRENT_TIMESTAMP WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
    			$result = mysql_query($query) or die("Erreur de récupération de la date du jour : " . $query);
     
    			session_start();
    			echo "<meta http-equiv=\"refresh\" content=\"0;url=./Accueil.php\" />" ;
    		}
    		else
    		{
    			echo "<meta http-equiv=\"refresh\" content=\"0;url=./Erreur.html\" />" ;
    		}
    	}
    }
     
     
    ?>
     
     
     
    <html>
          <head>
                <title>Page de connexion</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                <style type="text/css">
                       <!--
                       .input {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; color: #FFFFFF; text-decoration: none; background-color: #333333; border: #000000; border-top-width: thin; border-right-width: thin; border-bottom-width: thin; border-left-width: thin}
                       -->
                </style>
          </head>
     
          <body bgcolor="#FFFFFF">
                <div align="center">
                     <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
                              Pour accéder &agrave; cette rubrique, vous devez vous identifier :</font>
                     </b>
                </div>
                <form method="post" action="">
                      <br>
                      <br>
                      <div align="center">
                           <b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Nom d'utilisateur<br>
                           <input type="text" name="login">
                           <br>
                           <br>
                           Mot de passe</font>
                           </b>
                           <br>
                           <input type="password" name="pwd">
                           <br>
                           <br>
                           <input type="submit" name="connection" value="Connexion" class="input">
                      </div>
                </form>
                <br>
                <hr align="center" width="200" size="1" color="#000000">
                <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><br>
                     <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
                           <a href="./inscription.php">Inscription</a>
                           <br>
                           <a href="./password.php"> Mot de passe oublié ?</a>
                     </font>
                </div>
          </body>
    </html>


    Voici aussi ma page "accueil.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    <?php
    session_start();
    $_SESSION['ID_SESSION'] = session_id();
     
    $serveur = $_SESSION['ServeurMySQL'];
    $utilisateur = $_SESSION['UtilisateurMySQL'];
    $pwd = $_SESSION['PwdMySQL'];
    $base = $_SESSION['BaseMySQL'];
    $connexion = $_SESSION['ConnexionMySQL'];
    $DerniereConnexion = $_SESSION['AncienneDate'];
     
    $NomUser = $_SESSION['NomUser'] ;
    $NomGROUPE = $_SESSION['GROUPE'];
     
    $_SESSION['ServeurMySQL'] = $serveur;
    $_SESSION['UtilisateurMySQL'] = $utilisateur;
    $_SESSION['PwdMySQL'] = $pwd;
    $_SESSION['BaseMySQL'] = $base;
    $_SESSION['ConnexionMySQL'] = $connexion;
     
    if( isset($_POST['validation']) )
    {
    	switch ($_SESSION['GROUPE'])
    	{
    		default:
    			if ($_POST['donnees'] == 'ListeUtilisateurs')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./Global/ListeUtilisateurs.php\" />" ;
    			}
     
    			if ($_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/ListeCompleteTousLesGROUPE.php\" />" ;
    			}
    			if ($_POST['donnees'] == 'ListeCompleteDNS')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./Global/ListeCompleteDNS.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/ListeDNS-Server.php\" />" ;
    			}
     
    			break;
     
    		case 'GROUPE-GRP1' ;
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP1/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP1/ListeDNS-Server.php\" />" ;
    			}
    			break;
     
    		case 'GROUPE-GRP2' ;
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP2/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP2/ListeDNS-Server.php\" />" ;
    			}
    			break;
     
    		case 'GROUPE-GRP3';
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP3/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP3/ListeDNS-Server.php\" />" ;
    			}
    			break;
     
    		case 'GROUPE-GRP4' ;
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP4/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP4/ListeDNS-Server.php\" />" ;
    			}
    			break;
     
    		case 'GROUPE-GRP5' ;
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP5/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP5/ListeDNS-Server.php\" />" ;
    			}
    			break;
     
    		case 'GROUPE-GRP6' ;
    			if( $_POST['donnees'] == 'ListeConsoleComplete')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP6/ListeCompleteGROUPE.php\" />" ;
    			}
     
    			if( $_POST['donnees'] == 'ListeDNSServer')
    			{
    				echo "<meta http-equiv=\"refresh\" content=\"0;url=./GROUPE/GRP6/ListeDNS-Server.php\" />" ;
    			}
    			break;
    	}
    }
     
    ?>
     
     
     
    <html>
          <head>
                <title>Page d'accueil</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                <style type="text/css">
                       <!--
                       .input {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; color: #FFFFFF; text-decoration: none; background-color: #333333; border: #000000; border-top-width: thin; border-right-width: thin; border-bottom-width: thin; border-left-width: thin}
                       -->
                </style>
          </head>
     
          <body bgcolor="#FFFFFF">
                <div align="center">
    					<?php
    					echo "<b>";
    					echo "     <font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\">";
    					echo             "Bonjour et bienvenue $NomUser de $NomGROUPE";
    					echo "     </font>";
    					echo "</b>";
    					echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">";
    					echo "      <br><br>Nous sommes le " . date("j\-m\-Y \e\\t \i\l \e\s\\t H \h i \m\i\\n s \s.");
    					echo "      <br>Dernière connexion : $DerniereConnexion";
    					echo "</font>";
    					?>
                </div>
                <form method="post" action="">
                    <div align="center">
                    	<br>
    					<br>
        	        	<b>
            	    	<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
    	        	    	<br>
    	            		Quelles donn&eacute;es d&eacute;sirez-vous afficher ?
                    		<br>
    	                	<br>
        	        	</font>
        	        	</b>
    					<?php
    					if ($_SESSION['GROUPE'] == 'ADMIN')
    					{
    						echo "<br>";
    						echo "<input name=\"donnees\" type=\"radio\" value=\"ListeUtilisateurs\"> Liste des Utilisateurs.";
    						echo "<br>";
    						echo "<input name=\"donnees\" type=\"radio\" value=\"ListeCompleteDNS\"> Liste de tous les DNS.";
    						echo "<br>";
    						echo "<br>";
    					}
    					?>
           	    		<input name="donnees" type="radio" value="ListeConsoleComplete"> Liste de tous les clients.
            	    	<br>
            	    	<br>
                   		<input name="donnees" type="radio" value="ListeDNSServer"> DNS pointant vers les serveurs centralis&eacute;s.
                   		<b>
                   			<br>(Il faut donc modifier les DNS pour les faire pointer vers des UA valides)
                   		</b>
            	    	<br>
                    	<br>
                    	<br>
       	            	<input type="submit" name="validation" value="Valider" class="input">
                	</div>
                </form>
                <br>
                <hr align="center" width="200" size="1" color="#000000">
                <div align="center">
                	<br>
                    <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
                    	<a href="./login.php">Quitter</a>
                 	</font>
                </div>
          </body>
    </html>

    Et voici une page qu'on peut demandée dans "Accueil.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    <?php
    session_start();
     
     
    $serveur = $_SESSION['ServeurMySQL'];
    $utilisateur = $_SESSION['UtilisateurMySQL'];
    $pwd = $_SESSION['PwdMySQL'];
    $base = $_SESSION['BaseMySQL'];
    $connexion = $_SESSION['ConnexionMySQL'];
     
    $connexion = MySQL_connect($serveur, $utilisateur, $pwd);
     
    // Définit la base par défaut. Ce n'est pas indispensable mais ça évite de spécifier la base à chaque requête.
    mysql_select_db($base);
     
    //Création des Requêtes
    $RequeteRecherche = "SELECT DNS, AdresseIP FROM t_DNS_UA AS T1 WHERE T1.DNS NOT LIKE 'Command';";
    $RequeteNbreResultat = "SELECT count(*) FROM t_DNS_UA AS T1 WHERE T1.DNS NOT LIKE 'Command';";
    $RequeteNbreErreurs = "SELECT count(*) FROM t_DNS_UA AS T1 WHERE T1.DNS LIKE 'ERREUR';";
     
    //Exécution des Requêtes
    $Resultat = mysql_query($RequeteRecherche) or die("Erreur dans la requête : " . $RequeteRecherche);
    $ResultatNbre = mysql_query($RequeteNbreResultat) or die("Erreur dans la requête nombre de résultat : " . $RequeteNbreResultat);
    $ResultatNbreErreur = mysql_query($RequeteNbreErreurs) or die("Erreur dans la requête Nombre d'Erreur : " . $RequeteNbreErreurs);
     
     
    //Création du tableau de résultat de la requête
    echo "<table border =\"1\" align=\"center\">";
    echo "<tr>";
    echo "	<b>";
    echo "		<th>DNS</th>";
    echo "		<th>Adresse IP</th>";
    echo "	</b>";
    echo "</tr>";
     
    while ($ctItem = mysql_fetch_array($Resultat))
    {
    	$DNS = $ctItem[0];
    	$AdresseIP = $ctItem[1];
    	echo "<tr>";
    	if ($DNS == 'ERREUR')
    	{
    		echo "<td align=\"center\"><font color=\"FF0000\"><b>ERREUR de DNS</b></font></td>";
    		echo "<td align=\"center\"><font color=\"FF0000\"><b>$AdresseIP</b></font></td>";
    	}
    	else
    	{
    		echo "<td>$DNS</td>";
    		echo "<td align=\"center\">$AdresseIP</td>";
    	}
    	echo "</tr>";
    }
     
    $Nbre = mysql_result($ResultatNbre,0,0);
    echo "<tr>";
    echo "	<td align=\"center\"><b>Nombre d'adresses apparues : </b></td>";
    echo "	<td align=\"center\"><b>$Nbre</b></td>";
    echo "</tr>";
     
    $Nbre = mysql_result($ResultatNbreErreur,0,0);
    if ($Nbre >> 0)
    {
    	echo "<tr>";
    	echo "	<td align=\"center\"><font color=\"FF0000\"><b>Nombre d'erreurs apparues : </b></font></td>";
    	echo "	<td align=\"center\"><font color=\"FF0000\"><b>$Nbre</b></font></td>";
    	echo "</tr>";
    }
     
    echo "</table>";
     
    echo "<div align=\"center\">";
    echo "<br>";
    echo "<font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\">";
    echo "<a href=\"../Accueil.php\">Retour à la page d'Accueil</a>";
    echo "</font>";
    echo "</div>";
     
    ?>

    Il est clair que le site n'est pas optimisé mais ça c'est un autre pb. Pour le moment il nous donne les données qu'on a besoin.

    En tout cas merci pour l'aide.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tes pages à accès restreint doivent controler si $_SESSION['NomUser'] existe avant tout chose et rediriger ou arrêter si non.

    Pour l'optimisation c'est sur que c'est calamiteux : tu fais 3 select et 2 update pour lire et modifier la même ligne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    OK Mais comment on fait pour vérifier qu'elle existe ?
    Et si le navigateur n'est pas arrêté ? la variable existera toujours ? c'est justement mon pb, j'ai l'impression que les sessions n'expirent jamais justement, sauf qd on ferme le navigateur, le reste du tps je continu à avoir les données même si ça fait plus de 2h que je suis logué. C'est bien ça le pb d'ailleurs.

    Sinon pour le code, je le reconnais, je l'ai fait comme ça à la vas-vite sans chercher à optimiser quoi que ce soit, il fallait que le site soit en ligne très rapidement. Maintenant c'est la phase de correction des bugs et améliorations diverses dans les données retournées alors...

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    +1 Sabotage

    Tu te complique la vie je pense, de plus il est possible de récupérer d'un coup d'un seul plusieurs données dans une table (au lieu de les récupérer 1 par 1), de même qu'il est possible de faire un UPDATE sur plusieurs champs d'un coup d'un seul (au lieu de les faire 1 par 1).


    C'est plus simple que ça à mon sens.
    En 1er, il te faudrait une variable de session qui indiquerait SI la personne est identifiée ou pas.
    La vérification devra alors se faire sur toutes les pages qui réclament cette identification.

    Exemple (pour index.php ou autre page)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    session_start();
     
    // On vérifie que l'utilisateur est identifié
    if (!isset($_SESSION['is_log']) || $_SESSION['is_log'] == false) {
        // ERREUR -> pas identifié
        header('Location: login.php'); // Remplace avantageusement un refresh
        exit();
    }
     
    // Suite du code (Le script PHP/HTML se poursuivra QUE SI la personne est identifiée)
    echo 'Identifiée ... etc ...';
    Pour la page login.php on se contente de récupérer les données du formulaire en POST du login/pass.
    On vérifie dans la BDD leur existance/exactitude via une requête SQL

    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
     
    session_start();
    //
    if (isset($_POST['connection'], $_POST['login'], $_POST['pwd']) && !empty($_POST['login']) && !empty($_POST['pwd'])) {
        // Requête SQL (connexion etc ... effectué juste avant)
        $query = "SELECT user_id, nom  FROM t_Utilisateurs WHERE login = '".mysql_real_escape_string($_POST['login'])."' AND password = '".md5($_POST['pwd'])."'";
        $rs_user = mysql_query($query) or die ("Erreur de requête de connexion : " . $query);
        $count = mysql_num_rows($rs_user);
        //
        if ($count === 1) {
            // Existence de l'utilisateur -> Création des variables se sessions
            $user = mysql_fetch_array($rs_user);
            $_SESSION['is_log'] = true;
            $_SESSION['user_id'] = $user['user_id'];
            $_SESSION['nom'] = $user['nom'];
            // Certaines mises à jours si nécessaire
     
            // On redirige l'utilisateur vers une page par défaut
            header('Location: accueil.php'); // (ou index.php ou autre)
            exit();
        }
        else {
            // ERREUR. login ou pass non conforme ou inexistant
        }
    }
     
     
    // Partie HTML (formulaire)
    ... etc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sessionLogin = session_id;
     
    if ($_SESSION['SESSION_ID'] == $sessionLogin)
    {
    	session_unset();
    	session_destroy();
    }
    Cette partie me semble inutile car à chaque fois que la personne arrivera sur cette page la session sera systématiquement détruites ce qui peut être déroutant.
    De plus, il est inutile de stocker l'ID de session dans une variable se session vu que la session contient elle même cet ID et elle est unique.

    A la limite, tu pourrais exploiter la fonction session session_regenerate_id() qui remplacera l'ID au moment où l'identification est réussie, juste avant de créer les variables de session par exemple.


    Aussi, je ne vois nulle par d'ID d'utilisateur (genre user_id), tu te réfère pas mal sur le nom, ce qui me semble pas une bonne idée.
    Idem pour les groupes, un identifiant serait mieux que des noms.
    De plus, les noms des groupes ont l'air d'être stockés dans la table t_utilisateur alors qu'une table t_groupe serait utile à mon sens.

    Aussi, je ne vois pas trop l'utilité de stocker les configuration de la BDD dans des variables de sessions.
    D'une part c'est dangereux, car les sessions n'est pas un mécanisme totalement sûr, du coup, il vaut mieux ne pas stocker de données trop sensibles.

    Pour les config de connexions, théoriquement elles sont uniques (1 seul serveur de base de données, à la limite on peu avoir plusieurs bases (mais toujours sur ce même serveur).
    Du coup, il est bon de les placer dans un fichier à part, on l'inclus dans toutes ces pages, et on le place si possible en-dehors du serveur virtuel (en-dehors du www par exemple).


    Pour finir, il faudrait bannir cette pratique des "meta/refresh", c'est franchement dépassé comme technique, un header() c'est nettement mieux.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  17. #17
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    ouh là là tu me proposes donc une refonte complète de mon site !! hé beh !!
    c'est pas une mince affaire tout ça pour un débutant comme moi en développement web. Ca va pas etre simple
    Bon bah ya un sacré boulot !! moi qui pensait que c'était pas top mais de là à ce que ce soit autant... Faut dire que je l'ai fait à la super warrior pour avoir rapidement les données recherchées, et je codais les lignes au fur et à mesure que je pensais à telle ou telle fonctionnalité, sans avoir au préalablement réfléchi à tout ça. C'est ça de faire vouloir faire les choses rapidement.
    Bon bah ya plus qu'à comme on dit. Par contre pour les groupes, ID, etc... c'est ce qui me parait plus compliqué du coup.

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Korben-Dallas Voir le message
    ouh là là tu me proposes donc une refonte complète de mon site !! hé beh !!
    c'est pas une mince affaire tout ça pour un débutant comme moi en développement web. Ca va pas etre simple
    Disons qu'il faut savoir ce que tu veux.
    En tout cas, vouloir un espace privé géré par les session + une Base de Donnée + une notion/gestion de groupes n'est pas si simple, ce n'est pas du basique, ça demande un minimum de connaissance.

    Ce que je veux dire par là, et bien si on est débutant, et bien il serait mieux de commencer par des choses plus simples, ça me semble logique.
    Bref ... c'est un peu si on se lançais dans le marathon de Paris alors que la dernière fois qu'on a couru c'était au lycée.


    Ceci dit, ce n'était que des suggestions, libre à toi de t'en inspirer, et puis ce n'est pas une refonte au niveau du code Php mais juste quelques adaptations.
    De même que relever quelques aspect sur la sécurité de certaine données tout comme la conception de la Bdd, chose qui me semble indispensable dans un cas pareil.

    Par contre, coté conception de la BDD, les histoires des IDs, là, ça relève du Ba Ba dans ce domaine tout de même.
    Quant on crée une table, on commence par créer un champ, un id qui sera unique, une clé primaire, c'est justement grâce à elle où on parviendra à retrouver ses petits.
    Après, vient des notions de relations entre 2 tables via des clés primaires et clés secondaires(ou étrangères), ceci permettant de faire des jointures.
    Ici, c'est la base du fonctionnement/conception d'une Base De Donnée, et j'y peu rien, c'est comme ça.

    Si ces notions te sont étrangères, alors tu vas obligatoirement faire des erreurs, je dirais même qu'il n'y aura pas grand chose de correcte, bien malheureusement.


    Bref ... même crédo ... faut savoir ce que tu veux
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  19. #19
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 81
    Points
    81
    Par défaut
    en fait à la base, j'ai des données et il me faut les récupérer mais voilà il n'y a pas que moi, il y a aussi d'autres utilisateurs qui doivent ne récupérer que les données qui leurs sont nécessaires alors c'est comme ça que je suis venu à faire ceci. Car j'en avais marre de le faire la récupération de données et de leur envoyer par la suite pour ne jamais les voir traiter, là avec mon mini-site le but est qu'ils aillent eux-même chercher les infos (qui les concernent) et qu'ils les traitent. Donc tu vois le dilemme ? Et puis comme ça de mon coté j'apprends aussi des tas de choses intéressantes en créant ce mini-site.

  20. #20
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Bon ok, c'est un mini site, certes, mais le besoin est tout de même là, et les fonctionnalités qui vont avec, idem pour la complexité.

    En somme, ce n'est pas parce qu'on a juste 1 (petit) Km à faire avec sa voiture qu'il est inutile de faire les révisions, voir de virer la carrosserie, les freins, et tout l'toutim qu'on estimerait superflu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $query = "SELECT u.Nom FROM t_Utilisateurs AS u WHERE ... etc ...";
    $query = "SELECT u.GROUPE FROM t_Utilisateurs AS u WHERE ... etc ...";
    Ici par exemple, tu sélection (ou récupère) des données dans un même table et selon les même conditions
    Et bien ces 2 requête peuvent en faire qu'une, ce qui facilite les choses (et qui augmentera les performances, même si ce n'est pas très important dans ton cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT u.Nom, u.GROUPE FROM t_Utilisateurs AS u WHERE ... etc ...";
    Pour les IDs et notions de groupes, une structure du genre serait pas mal (par exemple) :
    table utilisateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    user_id | groupe_id | nom | ... etc ...
    1         | 1            | Nom1
    2         | 1            | Nom2
    3         | 2            | Nom1
    ... etc ...
    table groupes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    groupe_id | nom | ... etc ...
    1         | groupe_A
    2         | groupe_B
    ... etc ...
    Ce qui fait que la table "utilisateurs" est lié à celle du "groupe" grâce au champ "groupe_id".
    Du coup, il est possible de récupérer tout ce qui concerne un utilisateur et du groupe qu'il appartient, ceci d'un coup d'un seul grâce aux jointures.

    Exemple simple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT u.nom, g.nom
    FROM groupes g
    JOIN utilisateurs u ON g.groupe_id = u.groupe_id
    WHERE u.login = 'machin' AND u.passw = 'truc'
    Ici on obtient les nom de l'utilisateur et le nom du groupe auquel il appartient.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/12/2011, 10h28
  2. Réponses: 2
    Dernier message: 09/12/2011, 20h33
  3. [Cookies] limiter durée de session
    Par flydragon dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 16h03
  4. Réponses: 2
    Dernier message: 26/05/2006, 00h04
  5. [VB.NET] Durée vie var session vs redirect page login
    Par fabthebreton dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/12/2004, 17h35

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