Dans cette page, nous proposons une solution simple de suivi de connexion sans utiliser les méthodes proposées par l'un ou l'autre des langages de script. Le code proposé est en php, mais pourrait sans peine être écrit dans le modèle asp. De même on peut l'adapter pour réaliser un suivi plus intelligent comme celui proposé dans une autre page.
La connexion se fera naturellement à travers un formulaire du type
Nom :
Mot de passe :
qui appelle une page de code qui va successivement :
<?php
require(fonctions.php");
$host = "Bibli";
$user = "etd";
$password = "etd";
$conn = odbc_connect($host,$user,$password) or die ("raté");
$Mdp = crypte($Mdp);
// recherche si l'utilisateur est enregistré et possède le bon mot de passe
$query = "Select NumPersonne from Personnes where Nom ='".$Nom."' and MdP ='".$Mdp."'";
$succ = odbc_exec($conn,$query);
if (odbc_fetch_row($succ))
{
$Code = odbc_result($succ,1);
$Loc = "Location: Page.php?";
// une solution pour générer un numéro de session aléatoire
mt_srand((double)microtime()*100000000);
$sessid = DecHex(mt_rand(0,mt_getrandmax()));
$sessid = $sessid.DecHex(mt_rand(0,mt_getrandmax()));
$sessid = $sessid.DecHex(mt_rand(0,mt_getrandmax()));
$sessid = 'ID='.$sessid;
$aujourdhui = getdate(time()+1200);
$heure = $aujourdhui['hours'];
$minute = $aujourdhui['minutes'];
$seconde = $aujourdhui['seconds'];
$mois = $aujourdhui['mon'];
$mjour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
$fin = "$mjour/$mois/$annee $heure:$minute:$seconde";
// Création de la session
$query = "Insert into Sessions (IDSession,NumPersonne,Acces,Type,Date_Fin) values ('".$sessid."',".$Code.",'Valide','".$Type."','".$fin."')";
$result = odbc_exec($conn,$query);
$Loc = $Loc.$sessid;
header($Loc);
}
else
{
// Rejet d'un utilisateur incorrect
header("Location: default.htm");
}
?>
L'URL de la page proposée à l'utilisateur qui se connecte avec succès (et toutes les autres pages du site) est de la forme :
page.php?ID=OE1AF
où le dernier terme est la valeurde $sessid générée par le code de connexion.
Le code de ces pages est précédé d'un en-tête qui vérifie qu'une session est active et rejette l'utilisateur si ce n'est pas le cas.
<?php
if (!isset($ID)) header("Location: default.htm");
$host = "Bibli";
$user = "etd";
$password = "etd";
$conn = odbc_connect($host,$user,$password) or die ("raté");
$query = "Select NumPersonne, DATEDIFF(minute,GetDate(), Date_Fin) as Valide from Sessions where IDSession='ID=".$Id."'";
$succ = odbc_exec($conn,$query);
if (!(odbc_fetch_row($succ)))
{
header("Location: default.htm");
}
else
{
$Code=odbc_result($succ,1);
// Vérification de la durée de validité de la session
if (odbc_result($succ,2)<0)
{
header("Location: default.htm");
}
else
{
// On devrait ici prolonger de quelques minutes une session valide
}
}
?>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
... Code de la page ...
</body>
</html>