Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2010, 16h07   #1
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
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
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2010, 17h08   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 787
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 787
Points : 35 783
Points : 35 783
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h41.


 
 
 
 
Partenaires

Hébergement Web