host=''; $this->user=''; $this->pass=''; $this->base=''; $this->query=''; $this->link=false; $this->error=false; } //---------------------------------------------------------- // Message d'erreur //---------------------------------------------------------- function get_error(){ $this->error=@mysql_error(); return false; } //---------------------------------------------------------- // Connection au serveur //---------------------------------------------------------- function connect($host,$user,$pass){ $this->host=$host; $this->user=$user; $this->pass=$pass; $this->link=@mysql_connect($this->host,$this->user,$this->pass); if($this->link) return $this->link; $this->get_error(); return false; } //---------------------------------------------------------- // Sélection de la base de données //---------------------------------------------------------- function select_db($base=''){ if(!empty($base)) $this->base=$base; if($this->link) if(@mysql_select_db($this->base,$this->link)) return true; $this->get_error(); return false; } //---------------------------------------------------------- // Requête de la base de données - Retourne l'ID du résultat //---------------------------------------------------------- function send_query(){ if(!$this->link) if(!$this->connect()) return false; @mysql_free_result($this->link); $res=@mysql_query($this->query,$this->link); if(!$res) $this->get_error(); return $res; } //---------------------------------------------------------- // Nombre d'enregistrement dans le résultat //---------------------------------------------------------- function num_rows($res){ $out=false; if(isset($res)){ @mysql_free_result($this->link); $out=@mysql_num_rows($res); if(!$out) $this->get_error(); } return $out; } //---------------------------------------------------------- // Tableau du résultat //---------------------------------------------------------- function fetch_assoc($res){ $out=false; if(isset($res)){ @mysql_free_result($this->link); $out=@mysql_fetch_assoc($res); if(!$out) $this->get_error(); } return $out; } //---------------------------------------------------------- // Déconnexion //---------------------------------------------------------- function close(){ $out=false; if($this->link){ $out=@mysql_close($this->link); if(!$out) $this->get_error(); } return $out; } //---------------------------------------------------------- } //============================================================ // Retourne l'IP du client //============================================================ function getip(){ if(getenv('HTTP_X_FORWARDED_FOR')) return getenv('HTTP_X_FORWARDED_FOR'); if(getenv('HTTP_CLIENT_IP')) return getenv('HTTP_CLIENT_IP'); return getenv('REMOTE_ADDR'); } //============================================================ // Cette fonction va supprimer l'ancien enregistrement de la // session qui correspond au même userid et va insérer un // nouvel identifiant de session dans la base de données. //============================================================ function opensession($userid){ global $db,$table; $db->query="DELETE FROM ".$table['session']." WHERE `userid`='$userid'"; $db->send_query(); if(isset($_SESSIONS)) session_destroy(); $sid='X'.md5(uniqid(time())).'X'; session_id($sid); if(!isset($_SESSIONS)) session_start(); $ip=getip(); $last_modified=date('Y-m-d H-i-s'); $db->query="INSERT INTO ".$table['session']. " (`sid`,`userid`,`last_modified`,`ip`) VALUES ('$sid','$userid','$last_modified','$ip')"; if(!$db->send_query()) return false; $db->query="ALTER TABLE ".$table['session']; $db->send_query(); return true; } //============================================================ // Cette fonction permet de vérifier l'état de la connection. // Génère aussi un nouvel SID... //============================================================ function testsession(){ global $db,$table; if(!isset($_SESSIONS)) session_start(); $sid=session_id(); $ip=getip(); $db->query="SELECT * FROM ".$table['session']." WHERE `sid`='$sid' AND `ip`='$ip'"; $res=$db->send_query(); if(!$res) return false; if($db->num_rows($res)<1) return false; $sessdata=$db->fetch_assoc($res); if(!$sessdata) return false; $userid=$sessdata['userid']; $db->query="SELECT * FROM ".$table['membres']." WHERE `id`='$userid'"; $res=$db->send_query(); if(!$res) return false; if($db->num_rows($res)<1) return false; $userdata=$db->fetch_assoc($res); if(!$userdata) return false; if(!regeneresession($sid)) return false; return $userdata; } //============================================================ // Cette fonction gènère un nouvel SID dans la base. //============================================================ function regeneresession($sid){ global $db,$table; $ip=getip(); $newsid='X'.md5(uniqid(time())).'X'; unset($db->error); $db->query="UPDATE ".$table['session']." SET `sid`='$newsid' WHERE `sid`='$sid' AND `ip`='$ip'"; if(!$db->send_query()) return false; session_destroy(); session_id($newsid); session_start(); return(session_id()==$newsid); } //============================================================ // Cette fonction permet de fermer une session en cours en // supprimant son entrée dans la base de données. //============================================================ function closesession(){ global $db,$table; if(!isset($_SESSIONS)) session_start(); $sid=session_id(); session_destroy(); unset($db->error); $db->query="DELETE FROM ".$table['session']." WHERE `sid`='$sid'"; $db->send_query(); $res=(!isset($db->error)); $db->query="ALTER TABLE ".$table['session']; $db->send_query(); return $res; } //============================================================ // Cette fonction va vérifier si le couple username/password est correct. // Retourne l'ID du membre en cas de succès, false en cas d'échec. //============================================================ function getlogincheck($username,$password){ global $db,$table; $username=addslashes(trim($username)); $password=md5(addslashes(trim($password))); if(empty($username) && empty($password)) return false; $db->query="SELECT * FROM ".$table['membres']." WHERE `username`='$username' AND `password`='$password'"; $res=$db->send_query(); if(!$res) return false; if($db->num_rows($res)<1) return false; $userdata=$db->fetch_assoc($res); if(!empty($userdata)) return $userdata['id']; return false; } //============================================================ // Récupère les informations contenues dans les tables membres // et session en fonction de l'id du membre. //============================================================ function getuserinfo($id){ global $db,$table; if(!isset($id)) return false; $db->query="SELECT * FROM ".$table['membres']." WHERE `id`='$id'"; $res=$db->send_query(); if(!$res) return false; if($db->num_rows($res)<1) return false; $userdata=$db->fetch_assoc($res); $db->query="SELECT * FROM ".$table['session']." WHERE `userid`='$id'"; $res=$db->send_query(); if(!$res) return false; if($db->num_rows($res)<1) return false; $userdata+=$db->fetch_assoc($res); return $userdata; } //============================================================ // Cette fonction permet de supprimer à chaque succès // d'identification les entrées vieilles d'au moins 2 jours. //============================================================ function dbclean(){ global $db,$table; $limit=date('Y-m-d H-i-s',mktime(0,0,0,date('m'),date('d') - 2,date('Y'))); $db->query="DELETE FROM ".$table['session']." WHERE `last_modified`<'$limit'"; $db->send_query(); $db->query="ALTER TABLE ".$table['session']; $db->send_query(); } //============================================================ // Cette fonction affiche le formulaire d'identification. //============================================================ function getformview($username=''){ return('
'."\n". ''. ''."\n". '
'. ''. ''."\n". '
'. ''."\n". '
'); } //============================================================ // Cette fonction affiche tout simplement une message de // bienvenue en cas de succès d'identification. //============================================================ function getmsg($username=''){ if(empty($username)) return false; return('Bienvenue '.@htmlspecialchars($username). '
'."\n". ''."\n". '
'); } //============================================================ // Formulaire pour tester la session //============================================================ function gettestsession(){ return('
'."\n". ''."\n". '
'); } //============================================================ // Fonction pour cloturer le programme //============================================================ function myclose($mess=''){ global $db; $db->close(); if(!empty($mess)) printf($mess); } //============================================================ // // INITIALISATION DU PROGRAMME // //============================================================ //------------------------------------------------ // Création de l'objet mysql //------------------------------------------------ $db=new mysql_obj(); //------------------------------------------------ // Connection au serveur de données //------------------------------------------------ if(!$db->connect('localhost','root','')) return myclose('Erreur de connection au serveur '.$db->host.'.
'.$db->error); //------------------------------------------------ // Connection à la base sinon création //------------------------------------------------ if(!$db->select_db('basetest')){ $db->query="CREATE DATABASE IF NOT EXISTS `".$db->base."`"; $db->send_query(); if(!$db->select_db()) return myclose('Erreur de connection à la base de données '.$db->base.'.
'.$db->error); } //------------------------------------------------ // Création de la table session si nécessaire //------------------------------------------------ $table['session']='`site_session`'; $db->query="CREATE TABLE IF NOT EXISTS ".$table['session']." (". "`sid` text NOT NULL default '', ". "`userid` mediumint(9) NOT NULL, ". "`last_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, ". "`ip` varchar(15) NOT NULL)"; if(!$db->send_query()) return myclose('Impossible d\'accéder à la table de données '.$table['session'].'.
'.$db->error); //------------------------------------------------ // Création de la table membres si nécessaire //------------------------------------------------ $table['membres']='`site_user`'; $db->query="CREATE TABLE IF NOT EXISTS ".$table['membres']." (". "`id` mediumint(9) unsigned NOT NULL auto_increment, ". "`active` text NOT NULL default '', ". "`date` datetime NOT NULL default '', ". "`last_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, ". "`username` varchar(50) NOT NULL default '', ". "`password` varchar(32) NOT NULL default '', ". "`email` varchar(100) NOT NULL default '', ". "`country` varchar(50) NOT NULL default '', ". "`gender` varchar(1) NOT NULL default '', ". "`birthday` date NOT NULL default '', ". "`avatar` varchar(255) NOT NULL default '', ". "PRIMARY KEY (`id`))"; if(!$db->send_query()) return myclose('Impossible d\'accéder à la table de données '.$table['membres'].'.
'.$db->error); //============================================================ // // TRAITEMENT DU FORMULAIRE D'IDENTIFICATION // //============================================================ if(isset($_POST['opensession'])){ $username=@$_POST['username']; $password=@$_POST['password']; $id=getlogincheck($username,$password); if(is_numeric($id)){ dbclean(); if(opensession($id)){ printf(getmsg($username)); printf('
');
      print_r(getuserinfo($id));
      printf('
'); printf(gettestsession()); return myclose(); } } return myclose('Erreur d\'identification.
'.getformview($username).'
'.$db->error); } //============================================================ // // DECONNECTION // //============================================================ if(isset($_POST['closesession'])){ if(closesession()) return myclose('Déconnection effectuée.

'.getformview()); return myclose('Erreur durant la déconnection.
'); } //============================================================ // // TEST DE SESSION // //============================================================ if(isset($_POST['testsession'])){ $res=testsession(); if(!$res) return myclose('Veuillez vous identifier.
'.getformview()); printf(getmsg($res['username'])); printf('
');
  print_r(getuserinfo($res['id']));
  printf('
'); printf(gettestsession()); return myclose(); } //============================================================ // // AUCUNE ACTION -> FORMULAIRE D'IDENTIFICATION // //============================================================ return myclose('Veuillez vous identifier.
'.getformview()); ?>