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

Contribuez Discussion :

Authentification PHP-Ajax avec SESSION PHP [Sources]


Sujet :

Contribuez

  1. #1
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    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 : 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
     
    <?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 : 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
     
    <?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 : 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
     
     
    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'));
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    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
    Nouveau membre du Club
    Homme Profil pro
    Business Analyst
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 25
    Points
    25
    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 .

Discussions similaires

  1. Authentification PHP-Ajax avec SESSION PHP
    Par llaffont dans le forum Langage
    Réponses: 0
    Dernier message: 23/11/2010, 15h11
  2. Script d'authentification PHP / MySQL avec session
    Par king_soft dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2010, 15h00
  3. Php - Ajax => Pb Session (hébergeur free)
    Par kij dans le forum Langage
    Réponses: 2
    Dernier message: 03/06/2009, 10h45
  4. [AJAX] Temps d'apprentissage d'AJAX avec connaissances PHP/SQL
    Par ayvong dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/04/2007, 10h18
  5. Probleme d'identification avec sessions PHP
    Par bontbont dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 19h15

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