Suivi manuel de session

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>