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