Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre éprouvé Avatar de llaffont
    Profil pro Loïc Laffont
    Gestionnaire de parc micro-informatique
    Inscrit en
    juin 2007
    Messages
    566
    Détails du profil
    Informations personnelles :
    Nom : Loïc Laffont
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2007
    Messages : 566
    Points : 405
    Points
    405

    Par défaut Authentification PHP-Ajax avec SESSION PHP

    Un petit bout de code présentant l'authentification site avec gestion des session PHP. tous ça en AJAX :

    Ce n'est pas très sécurisé mais c'est fonctionnel et ça peut être une intro en matière.

    Comme toujours je suis ouvert au correction.

    Intro.php
    Code :
    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
     
    <?php 
    session_start();
     
    if (IsSet($_SESSION['time'])){
    		if ((time()-$_SESSION['time']) >=  (5*60)){ //Si la session est vieille de plus de 5 minute on ferme le tout. simplement en purgeant le array de session.
    			$_SESSION = array();
    			/*
    			* Si l'on souhaite prolonger la session tant qu'il existe une activitée dans une page il suffit d'enregistrer le nouveau timestamp comme ceci :
    			* $_SESSION['time'] = time();			
    			*/
    		}
    	}
    ?>
    <html>
      <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>
          Authentif
        </title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type= "text/javascript"></script>
        <script type="text/javascript">
     
    	$(function(){// Document is ready
    	$("#FormAuthentifDeco").submit(function(){ 
    		$("#message").empty(); //On vide la balise message On ne sait Jamais un message peut avoir été déjà émis
    		var url = "ajax.php";		
            var login = $("#username").val(); //Valeur du login
            var password = $("#password").val(); // Valeur du Password
    		var actionPOST = $("#actionPOSTDeco").val(); //Valeur de la balise cachée indiquant l'action à mener
    		var SIDPHP = $("#cookie").val();
            var parametres = 'actionPOST='+actionPOST+'&login='+login+'&password='+password+'&cookie='+SIDPHP; 
            $.ajax({ 
                type: "POST", 
                url: url, 
                data: parametres, 
                dataType: "json", 
                success: function(json){ 
    				if (json["etat"] != "NotSuccess"){
    					location.reload(true); //On est connecté Donc on raffraichit la page
    				}else{
    					$("#message").append("Les identifiants ne sont pas corrects");
    					$("#username").css({border:"2px solid red"}); //On indique qu'il y a une erreur
    					$("#password").css({border:"2px solid red"});
    				} 
    				}, 
    			error :	function(json){	$("#message").append("erreur dans le script Ajax-PHP");	}
     
            }); 
            return false; //un habitude qui n'a as grand intérêt ici.
        });
     
    	$("#FormAuthentifCo").submit(function(){
    	$("#message").empty();
    		var url = "ajax.php";		
    		var actionPOST = $("#actionPOSTCo").val();
    		var SIDPHP = $("#cookie").val();
            var parametres = 'actionPOST='+actionPOST+'&cookie='+SIDPHP; ;
            $.ajax({ 
                type: "POST", 
                url: url, 
                data: parametres, 
                dataType: "json", 
                success: function(json){ 
    				if (json["etat"] != "NotSuccess"){
    					$("#message").append("Bonne Journée"); //On remercie la personne de ça visite
    					$("#DivAuthentifCo").hide(); //on cache la mire de déconnexion
    					setTimeout("location.reload(true);",3000); //On rafraichi la page au bout de 3 secondes
    				}else{
    					$("#message").append("La session ne s'est pas fermée correctement");
    				} 
    				}, 
    			error :	function(json){	$("#message").append("erreur dans le script Ajax-PHP");	} // S'affiche si le retour d'Ajax.php n'est pas correct
     
            }); 
            return false; 
    	});
    	});
    </script>
      </head>
      <body>
     
          <div id="message"></div>
    	<?php
    	if(!isset($_SESSION['connect'])){
    	//Aspect Déconnecté 	
          echo '<div id="DivAuthentifDeco">
            <form id="FormAuthentifDeco" enctype="multipart/form-data" method="post" name="FormAuthentif">
              <input type="hidden" id="actionPOSTDeco" value="GoOnline" />
    		  <input type="hidden" id="cookie" value="'.session_id().'" />
              <table align="center" width="320 px">
                <tbody>
                  <tr>
                    <th align="left">
                      Nom d\'utilisateur :
                    </th>
                    <th align="left">
                      Mot de passe :
                    </th>
                    <th align="left"></th>
                  </tr>
                  <tr>
                    <td>
                      <input id="username" name="username" value="" size="18" maxlength="80" autocomplete="off" />
                    </td>
                    <td>
                      <input id="password" name="password" value="" type="password" size="18" maxlength="80" autocomplete="off" />
                    </td>
                    <td>
                      <input type="image" src="valide-20x20.png" title="Se connecter" />
                    </td>
                  </tr>
                </tbody>
              </table>
            </form>
          </div>';
    	  }else{
     
    //Aspect Connecté 	  
    	  echo'<div id="DivAuthentifCo">
            <form id="FormAuthentifCo" enctype="multipart/form-data" method="post" name="FormAuthentif">
              <input type="hidden" id="actionPOSTCo" value="GoOffline" />
    		  <input type="hidden" id="cookie" value="'.session_id().'" />
              <table align="center" width="320 px">
                <tbody>
                  <tr>
                    <td>
                      Bonjour, 
                      '.$_SESSION['prenom'].' '.$_SESSION['nom'].'
                      <input type="image" src="deco-20X20.png" title="Se déconnecter" />
                    </td>
                  </tr>
                </tbody>
              </table>
            </form>
          </div>';
    	  }
    	  ?>
         </body>
    </html>
    Ajax.php
    Code :
    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
     
    <?php 
    if(isset($_POST['cookie']) && $_POST['cookie']!= session_id()){ session_id($_POST['cookie']);}
    session_start();
    header('Content-type: text/json; charset=UTF-8');
     
    if(isSet($_REQUEST['actionPOST'])){// Gère les actions opérées par un formulaire
    		switch($_REQUEST['actionPOST']) {
     
    		case 'GoOnline' : // Quelqu'un tente une'authentification
    			if(authSessionCheck()){	
    				echo '{"etat":"Success"}'; 
    			}else{
    				echo '{"etat":"NotSuccess"}';
    			}
    		break;
     
    		case 'GoOffline' : // Quelqu'un fait une déco
    			if (isset($_COOKIE[session_name()]))
    			{setcookie(session_name(),'',time()-4200,'/');} //On vide le Cookie
    			$_SESSION = array();	//On purge les infos de session.
    			echo '{"etat":"Success"}';			
    		break;
     
    		}
     
    	}
     
    function authSessionCheck(){			
    	mysql_connect("localhost","root",""); //connexion serveur MySql
    	mysql_select_db("testAuthentif"); // Pointer Table
    	$password = md5($_POST['password']); // Convertir la valeur password en MD5
    	// requete sur la table Users (on récupère les infos de la personne)
    	$query='SELECT * FROM `users` WHERE `login`="'.trim($_POST['login']).'" AND  `password`="'.$password.'"'; // requête sur la base Users
    	$result = mysql_query($query) or die('Erreur SQL ! Function : '.__FUNCTION__.'('.__LINE__.')<br>'.htmlentities($query).'<br>'.mysql_error());
    	$row_verif = mysql_fetch_assoc($result);
    	$Nb_utilisateur = mysql_num_rows($result);
    	if ($Nb_utilisateur) {	// On test s'il y a un utilisateur correspondant				
    		// Si la session est démarré on enregistre les données dedans
    		if (isset($_SESSION)){
    			$_SESSION['nom'] = htmlentities($row_verif['Nom']); // Son nom
    			$_SESSION['prenom'] = htmlentities($row_verif['Prenom']); // Son Prénom
    			$_SESSION['login'] = $row_verif['Login']; // Son Login
    			$_SESSION['id'] = $row_verif['Id']; 	
    			$_SESSION['time'] = time(); // Le timestamp de connexion dans le cas ou l'on souhaite gérer l'expiration de la session					
    			$_SESSION['connect']=1;	//Afin d'indiquer que la session est réussi.	
    			$_SESSION['SID_ID']=session_id();	//Identifiant de session
    		}
    			//print_r($_SESSION);
    		return true;
    	}else {
    		return false;				
    	}
    }
     
    ?>
    Sql
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    CREATE TABLE IF NOT EXISTS `users` (
      `Id` int(11) NOT NULL AUTO_INCREMENT,
      `Login` varchar(30) NOT NULL,
      `Prenom` varchar(60) NOT NULL,
      `Nom` varchar(80) NOT NULL,
      `Password` varchar(120) NOT NULL,
      PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
     
    --
    -- Contenu de la table `users`
    --
     
    INSERT INTO `users` (`Id`, `Login`, `Prenom`, `Nom`, `Password`) VALUES
    (1, 'toto', 'Toto', 'Caca', md5('t')),
    (2, 'Paul', 'Paul', 'Paulette', md5('p')),
    (3, 'André', 'André', 'Dupont', md5('a'));
    En théorie tout devrait fonctionner...

    La France a un incroyable talent : Son retard en technologie informatique

  2. #2
    Responsable Développement Web

    Avatar de Bovino
    Homme Profil pro Didier Mouronval
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    21 977
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier Mouronval
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2008
    Messages : 21 977
    Points : 81 187
    Points
    81 187

    Par défaut

    Après lecture rapide, ça me semble pas mal

    Juste une remarque, tu ne pourrais pas tester le document.cookie (et / ou le search de l'URL) pour transmettre l'identifiant de session via les paramètres si les cookies sont désactivés ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Futur Membre du Club
    Homme Profil pro Nicolier La stronaute
    Business Analyst
    Inscrit en
    janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolier La stronaute
    Localisation : Suisse

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2009
    Messages : 15
    Points : 16
    Points
    16

    Par défaut Utilitaires de débuggages

    Bonjour Messieurs,
    Très intéressant comme conversation, cependant les données Login && PWD passent en clair... comme JS n'implémente pas de méthode native pour un encodage en MD5 ou SHA ... Dès lors, c'est plus que moyennement sécurisé, non?

    Ce qui signifie qui via un simple utilitaire de debug, comme FireBug ou autres dans Chrome, on voit directement les Logins et PWD en clairs.

    Si vous avez une méthode pour crypter au moins le PWD lors du transfert (Même en POST) je suis preneur.


    Have a nice day, boys .

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •