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'));