Gestion
Multi-utilisateur :
Démo en ligne
Gestion multi-utilisateur en PHP4.0 grâce aux sessions :
La gestion multi-utilisateur permet comme son nom l'indique de gérer
plusieurs comptes utilisateurs, et est de plus en plus utilisée
sur les sites Web marchand, de jeux
etc; ainsi vous remplissez un
formulaire une seule fois et grâce à un login et un mot de
passe vous pouvez vous identifier auprès du serveur.
Pour cet exemple de gestion multi-utilisateur nous allons utiliser les
sessions, et la sauvegarde des données de chaque utilisateur dans
une base de données par le biais d'un formulaire d'inscription
en HTML qui se nomme formulaire.htm ce formulaire sera traité par
le script PHP traiterformulaire.php, après il ne reste plus qu'à
se logguer et on arrive sur la page d'accueil réservé aux
utilisateurs inscrits.
Pour cet exemple de sessions nous allons créer un embryon de site
WEB avec certaines pages à accès restreint aux utilisateurs
loggués (comme la page indexlog.php).
Qu'est ce que les sessions en PHP ?
Les sessions sont apparues depuis la version 4 du PHP, elles permettent
de sauvegarder des informations (contenu dans des variables) sur le visiteur
du site Web, sans perdre ces données entre plusieurs accés
(lors de la navigation sur le site).
Avant de démarrer une session on peut indiquer un chemin vers lequel
les sessions seront sauvegardées et chargées grâce
à la fonction session_save_path("chemin_de_la_session").
Le principe est très simple, une session est crée lors de
l'arrivée du visiteur avec la fonction session_start() (cette fonction
retourne toujours true (vrai)), alors coté serveur web un numéro
d'identificateur unique est conçu pour cet utilisateur, ce numéro
unique correspond au nom du fichier qui est enregistré sur le disque
dur dans un répertoire temporaire; ce fichier contient les variables
enregistrées avec la fonction session_register("nomdelavariable"),
cette fonction retourne true (vrai) si la variable à été
correctement enregistrée.
Pour supprimer une variable de la session en cours on utilise la fonction
session_unregister("nomdelavariable"), on peut aussi vérifier
si une variable a été enregistrée avec la fonction
session_is_registered("nomdelavariable") qui retourne true (vrai)
si une variable a été enregistrée ou false (faux)
dans le cas contraire.
L'enregistrement des variables dans le fichier se fait à la fin
du script PHP, du coté client (le visiteur) un cookie est créé
et contient le numéro de session, si les cookies ne sont pas supportés
par le navigateur du visiteur l'identificateur de session et passé
par l'URL du site (exemple: http://titan.nexen.net/page2.php?PHPSESSID=f08b925af0ecb52bdd2de97d95cdbe6b),
pour que le numéro de session soit automatiquement passé
en paramètre à l'URL de manière transparente il faut
que le PHP soit compilé avec l'option --enable-trans-sid (la version
PHP de EasyPHP1.1.0 n'a pas été compilé avec cette
option).
On peut aussi donner un nom à une session avec la fonction session_name("nom_de_ma_session"),
par défaut le nom de la session et PHPSESSID.
La session sera détruite automatiquement lorsque le visiteur quittera
son navigateur, où la destruction peut être forcée
avec la fonction session_destroy() qui détruira toutes les données
associées à cette session.
Site professionnel utilisant les sessions
en PHP:
Pour bien comprendre les sessions comme dit le vieille adage mieux vaut
un exemple concret que du baratin ;-)
Exemple simple d'une session:
Fichier sessions.php
<?
$save_path='C:\WINDOWS\temp'; /* Chemin on l'on va sauver la session sous
Windows */
/*
$save_path='/temp'; // Chemin on l'on va sauver la session sous Linux
*/
session_save_path($save_path); /* Indique au PHP vers ou sauver la session
*/
session_start(); /* on démarre la session */
session_name("masession"); /* Nom de la session */
session_register("test"); /* Variable de la session à
sauvegarder */
$test++; /* On incrémente notre variable de session */
$idsession=session_id(); /* Retourne le numéro de la session */
$nomsession=session_name(); /* Retourne le nom de la session */
echo "Variable test de la session: test=$test<br>Numéro
de la session: $idsession<br>Nom de la session: $nomsession";
?>
Sauvegardez ce fichier sous C:\EasyPHP\www
Ensuite saisissez dans votre navigateur Web: http://localhost/sessions.php
Actualisez plusieurs fois et vous verrez que la variable test s'incrémente
à chaque fois.
Exemple d'affichage après avoir actualisé plusieurs fois
la page:
Variable test de la session: test=8
Numéro de la session: 10717533516348a04a9bd819f2900995
Nom de la session: masession
Création de notre formulaire
d'inscription en HTML qui se nomme formulaire.htm :
Ce formulaire a été créé avec un logiciel
de conception de site Web et ne comporte aucune ligne de PHP, comme vous
pouvez le voir le design et très basique.
Ce formulaire envoi les données à la page traiterformulaire.php.
Comme à l'accoutumé nous allons créé notre
table qui contient les inscriptions des utilisateurs.
Table inscriptions
#
# Structure de la table 'inscriptions'
#
DROP TABLE IF EXISTS inscriptions;
CREATE TABLE inscriptions(
numero int(10) unsigned NOT NULL auto_increment,
login varchar(20) NOT NULL,
pass varchar(10) NOT NULL,
prenom varchar(20) NOT NULL,
pseudo varchar(20) NOT NULL,
icq int(10) unsigned NOT NULL,
email varchar(100) NOT NULL,
commentaires varchar(200) NOT NULL,
question varchar(1) NOT NULL,
ip varchar(15) NOT NULL,
domaine varchar(200) NOT NULL,
navigateur varchar(200) NOT NULL,
dateYMDheure datetime NOT NULL, #format: 'YYYY-MM-DD HH:MM:SS'
PRIMARY KEY (numero),
UNIQUE numero (numero)
);
Explication des champs de la table
inscriptions :
numero s'auto incrémente il permet de voir d'un seul coups d'il
combien le nombre d'inscriptions
login contient le login saisi dans le formulaire
pass contient le mot de passe saisi dans le formulaire
prenom contient le prénom saisi dans le formulaire
pseudo contient le pseudonyme saisi dans le formulaire
icq contient le numéro icq saisi dans le formulaire ou 0 si aucun
No ICQ n'a été saisi
email contient l'adresse E-Mail saisi dans le formulaire
commentaires contient les commentaires saisi dans le formulaire
question est égale à 0 si l'on répond Non ou 1 si
on répond oui
Les données suivantes de la table ne sont pas vitales mais elles
peuvent servir, ainsi si un petit malin a essayé de tester la robustesse
du script PHP vous aurez tout un tas d'informations le concernant (c'est
une méthode bien connue de l'oncle Bill$ ;-)
ip contient l'adresse ip de l'internaute qui a rempli le formulaire
domaine contient le nom de domaine de l'internaute qui a rempli le formulaire
navigateur contient le type de navigateur utilisé par le surfeur
dateYMDheure contient la date et l'heure de l'inscription (YYYY-MM-DD
HH:MM:SS== Année sur 4chiffres-Mois sur 2chiffres-Jours sur 2chiffres
Heure:Minutes:Secondes)
Visualisation de l'enregistrement
des inscriptions avec phpMyAdmin
Nous allons maintenant créer le fichier traiterformulaire.php.
Ce fichier est un mélange de HTML et de PHP qui enregistrera les
données du formulaire dans la base de données pour créer
le compte utilisateur, nous allons donc traiter ces données en
vérifiant chaque champs et sa validité et si tout est correct
on sauvegarde ces données dans la table inscriptions.
Traitement des données
envoyées par le formulaire formulaire.htm
Comme nous nous sommes inscrits, nous allons créer une page pour
s'authentifier avec notre Login et notre Mot de Passe et ainsi nous aurons
accès à une page disponible que pour les utilisateurs enregistrés,
cette page n'est ni plus ni moins que la page d'accueil du site, elle
s'appelle index.php ainsi si notre site se situe sur www.monprovider.com/mapage
la page et que l'on saisi cette URL dans notre navigateur, index.php sera
automatiquement appelé, la page indexlog.php sera la page par défaut
des utilisateurs loggués.
Le fichier index.php est la page d'accueil des utilisateurs non loggués,
cette page mélange le HTML et le PHP.
Le fichier indexlog.php est la page d'accueil des utilisateurs loggués,
cette page mélange le HTML et le PHP.
Le fichier traiterformulaire.php vérifie les données envoyés
par formulaire.htm
Pour nous simplifier la tâche nous allons partager nos fonctions
PHP en plusieurs fichiers réutilisables à volontée.
Le fichier config.php contient toute la configuration de notre site Web.
Le fichier auth.php débute la session ou utilise une ancienne session.
Le fichier verifauth.php permet de vérifier si on s'est authentifié
(en effet le mot et un peu barbare) auparavant avec un Login et un Mot
de Passe qui va bien et donc ce fichier ne sera inclue que sur les pages
WEB avec restriction d'accès (les utilisateurs qui doivent être
loggués pour accéder à ces pages).
Le fichier login.php est lancé pour se logguer, il vérifie
le mot de passe et le login saisi.
Enfin le fichier logout.php permet de supprimer la session donc de se
déloguer.
Toutes les pages additionnelles concernant seulement les utilisateurs
loggués devront avoir dans leur entête le code suivant:
<?
include("auth.php");
include("verifauth.php");
?>
Pour les pages additionnelles concernant tout les utilisateurs elles devront
débuter par:
<?
include("auth.php");
?>
Attention !! Le suffixe de ces pages devra être .php
Les pages WEB peuvent très bien être faites avec des éditeurs
HTML classique.
La page d'accueil index.php de notre site WEB pour les utilisateurs non
loggués
La page d'accueil indexlog.php de notre site WEB pour les utilisateurs
loggués
Fichier index.php (Page d'accueil du site automatiquement appelée):
Dans ce fichier nous allons vérifier que le login et le mot de
passe de la session de l'utilisateur sont inscrits dans la base de donnée
et surtout on vérifie que la paire login/pass et correct, si tout
est correct c'est que le visiteur c'est loggué, donc on redirige
ce dernier sur la page d'accueil des utilisateurs loggués indexlog.php.
Si aucun login, mot de passe et numéro de session (ce sont des
variables de sessions enregistrées sur le disque dur du serveur),
n'existe c'est que le visiteur ne c'est pas loggué donc on reste
sur cette page.
Codage:
<? /* PHP */
/* Inclusion du fichier auth.php qui permet de créer ou d'ouvrir
une session */
include("auth.php");
/* On vérifie que les caractères ne contiennent que les
caractères spécifiés*/
function filtrelogpwd($valeur)
{
return ereg("^[ '`,;:ùçéèàa-zA-Z0-9]+$",$valeur);
}
function veriflogin()
{
global $serveur,$loginsql,$passsql,$table,$base,$login,$pass;
$password=$pass;
if (!$login) return false;
if (!filtrelogpwd($login)) return false;
if (!$password) return false;
if (!filtrelogpwd($password)) return false;
// Connexion au serveur
$id=@mysql_connect($serveur,$loginsql,$passsql) or die("Impossible
de se connecter à la base de donnée<br>".mysql_error());
mysql_select_db("$base");
// Sélection de la table
$Requete = " SELECT login, pass ";
$Requete.= " FROM $table ";
$Requete.= " WHERE login = '$login' AND pass = '$password' ";
$result = mysql_query($Requete,$id) or die("Requete de vérification
de Login et Mot de Passe invalide: ".mysql_error());
// retoune le nombre d'enregistrements dans la table ( ligne )
$lignes = mysql_num_rows($result);
if ($lignes<1)
{
return false;
}else
{
$res=mysql_fetch_row($result);
if ($res[0]==$login && $res[1]==$password) return true;
else return false;
}
} //Fin de la fonction veriflogin()
/* On vérifie que tout les varaible $login,$pass et $id_session
sont remplis
*
*/
if ( $login!="" && $pass!="" && $id_session!=""
)
{
/* On vérifie si le login et le mot de pass sont bien dans la base
de donnée */
if ( !(veriflogin()) )
{
/* Si il y'a une erreur dans le Login ou le mot de Pass on initialise
une variable globale avec l'erreur */
$erreur="Erreur Login ou Mot de Passe incorrect";
}else
{
/* Si tout est c'est bien déroulé on rafraîchit la
page courante avec la page indexlog.php*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); /* Date du
passé */
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); /* tout le temps différente */
header("Cache-Control: no-cache, must-revalidate"); /* Pour
HTTP/1.1 */
header("Pragma: no-cache");
include($indexlog);
exit();
}
}
?>
ICI on met le code HTML de la page d'accueil.
Fichier indexlog.php
Page qui est affichée lorsqu'un utilisateur est loggué
Codage:
<? /* PHP */
include("auth.php");
include("verifauth.php");
?>
ICI on met le code HTML de la page d'un utilisateur loggué.
Fichier traiterformulaire.php
Ce fichier vérifie les données envoyées par formulaire.htm
et sauvegarde ces données dans la table inscriptions, si une erreur
est détectée on affiche l'erreur.
Codage:
<HTML>
<HEAD>
<TITLE>Vérification de l'inscription en ligne</TITLE>
<META NAME="Description" CONTENT="Inscription">
<META NAME="Author" CONTENT="TITAN">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=iso-8859-1">
</HEAD>
<BODY bgcolor="#6699CC">
<p align="center"> <b><font face="Arial,
Helvetica, sans-serif" color="#400040" size="6">VALIDATION
DE L'INSCRIPTION</font><br>
</b> <br>
<div align="center">
<table width="402" border="0" height="48"
align="center">
<tr>
<td height="20" width="488" valign="middle"
align="center">
<?
/* Configuration */
include("config.php");
/* Fonction de vérification de syntaxe d'un email */
function is_email($email)
{
$ret=false;
if(strstr($email, '@') && strstr($email, '.'))
{
if(eregi("^([_a-z0-9]+([\\._a-z0-9-]+)*)@([a-z0-9]{2,}(\\.[a-z0-9-]{2,})*\\.[a-z]{2,3})$",
$email))
{
$ret=true;
}
}
return $ret;
}
function formulaire()
{
/* On déclare nos variables provenant du formulaire en global pour
y accéder dans les fonctions et en dehors des fonctions */
global $login,$pass1,$pass2,$prenom,$pseudo,$icq,$email,$commentaires,$question;
echo "<p><B><U><FONT SIZE=5>Inscription en
ligne</FONT></U></p>";
echo "<p>";
/* On vérifie si le login a été saisi */
if ($login==false)
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez saisir un login</b></font><br><br>";
return false;
}
echo "Votre Login: $login<br>";
/* On vérifie si le mot de passe a été saisi dans
les 2champs */
if ($pass1==false ||$pass2==false)
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez inscrire un mot de passe dans les 2champs</b></font><br><br>";
return false;
}
/* On vérifie que les mots de passe dans les deux champs sont
identiques */
if ($pass1!=$pass2)
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez inscrire le même mot de passe dans les 2champs</b></font><br><br>";
return false;
}
echo "Votre Mot de Passe: $pass1<br>";
/* On vérifie si le prénom a été saisi */
if ($prenom==false)
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez saisir votre prénom</b></font><br><br>";
return false;
}
echo "Votre Prénom: $prenom<br>";
/* On vérifie si le pseudo a été saisi */
if ($pseudo==false)
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez saisir votre prénom</b></font><br><br>";
return false;
}
echo "Votre Pseudo: $pseudo<br>";
/* Si le No ICQ a été saisi on vérifie qu'il ne
contient que des chiffres */
if ($icq)
{
if ((ereg("^[0-9]+$",$icq))==false)
{
echo "<font color=\"#FF0000\"><b>Erreur le
champ ICQ doit contenir seulement des chiffres</b></font><br><br>";
return false;
}
}
/* Si le numéro ICQ a été inscrit on l'affiche
*/
if ($icq==true) echo "Numéro ICQ: $icq<br>";
/* Vérification de l'adresse Email */
if ($email=="")
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
Vous devez entrer votre adresse E-Mail</b></font><br><br>";
return false;
}else if (!is_email($email))
{
echo "<font color=\"#FF0000\"><b>ERREUR !!
L'adresse E-Mail est incorrect</b></font><br><br>";
return false;
}
echo "Votre Email: $email<br>";
/* Si il y'a des commentaires on les affiches */
if ($commentaires)
{
echo "Vos commentaires: $commentaires<br>";
}
return true;
}
function quitter($erreur)
{
if ($erreur) echo "$erreur";
echo " <A HREF='javascript:history.go(-1)'>Retour au formulaire</A>
</td>
</tr>
</table>
</div>
</BODY>
</HTML>";
exit();
}
$succ=formulaire();
if ($succ==false)
{
quitter("");
}
/* Fin de la gestion du formulaire */
/* Connexion au serveur */
$id=@mysql_connect($serveur,$loginsql,$passsql);
if ($id==false)
{
quitter("<font color=\"#FF0000\"><b>Erreur
impossible de se connecter au serveur SQL</b></font><br><br>");
}
/* On séléctionne la base de donnée */
@mysql_select_db("$base") or quitter("<font color=\"#FF0000\"><b>Erreur
impossible de séléctionner la base: $base</b></font><br><br>".mysql_error());
/* On vérifie si le login n'est pas déjà utilisé
par un autre utilisateur */
$Requete = " SELECT login ";
$Requete.= " FROM $table ";
$Requete.= " WHERE login = '$login'";
$result = mysql_query($Requete,$id) or quitter("<font color=\"#FF0000\"><b>Requête
de vérification de Login invalide</b></font><br><br>");
// retoune le nombre d'enregistrements
$lignes = mysql_num_rows($result);
mysql_free_result($result);
if ($lignes>=1)
{
quitter("<font color=\"#FF0000\"><b>Erreur
ce login est déjà enregistré<br>Veuillez choisir
un autre login</b></font><br><br>");
}
$ip=$REMOTE_ADDR;
$domaine=gethostbyaddr($REMOTE_ADDR);
$navigateur=$HTTP_USER_AGENT;
//$login,$pass1,$pass2,$prenom,$pseudo,$icq,$email,$commentaires,$question;
/* On ajoute des slashs devant tout les caractères spéciaux
pour la base de donnée */
$login=addslashes($login);
$pass1=addslashes($pass1);
$prenom=addslashes($prenom);
$pseudo=addslashes($pseudo);
$icq=addslashes($icq);
$email=addslashes($email);
$commentaires=addslashes($commentaires);
$question=addslashes($question);
$query = "INSERT INTO $table VALUES ('0','$login','$pass1','$prenom','$pseudo','$icq','$email','$commentaires','$question','$ip','$domaine','$navigateur',NOW())";
$result = mysql_query($query);
if ($result==true)
{
echo "<br><b>Enregistrement réussi !!</b><br><br>";
}else
{
echo "<br><font color=\"#FF0000\"><b>Erreur
enregistrement échoué veuillez contacter le webmaster !!</b></font><br><br>";
}
echo "<A HREF='$index'>Retour à la page d'accueil</A>";
?>
</td>
</tr>
</table>
</div>
</BODY>
</HTML>
Fichier auth.php
Débute la session ou utilise une ancienne session
Codage:
<?
include("config.php");
session_name($sessname);
session_start();
?>
Fichier config.php
Fichier de configuration de notre site Web c'est le seul fichier qui doit
être modifié pour l'adapter à votre hébergeur,
normalment vous n'aurez qu'à modifier $base = "mabase";
et mettre le nom de votre base MySQL.
Codage:
<?
/* Nom de la session */
$sessname="loginphp";
/* Page d'accueil */
$index="index.php";
/* Page d'accueil pour les loggés */
$indexlog="indexlog.php";
/* Page pour se logguer */
$veriflogin="login.php";
/* Page pour se délogguer */
$logout="logout.php";
/*
On récupère nos variables d'environnement dont on va se
servir,
car celles-ci ne sont pas toujours initialisées automatiquement
*/
$HTTP_HOST=getenv("HTTP_HOST"); /* Nom de domaine du serveur
qui éxecute le PHP */
$REMOTE_ADDR=getenv("REMOTE_ADDR"); /* Adresse IP du visiteur
de notre page Web */
$HTTP_USER_AGENT=getenv("HTTP_USER_AGENT"); /* Navigateur du
visiteur */
/* On vérifie si on est en local ou sur Internet pour pouvoir
tester le programme en local */
if ($HTTP_HOST!="localhost")
{
$serveur = "mysql.free.fr";
$loginsql = "monlogin";
$passsql = "monmotdepass";
}else
{
$serveur="localhost"; /* Mode local ne nécessite ni mot
de pass ni login */
$loginsql="";
$passsql="";
/* Chemin de sauvegarde de nos sessions */
$save_path='C:\WINDOWS\temp';
session_save_path($save_path);
$save_path=session_save_path();
}
$base = "mabase"; // Nom de la base
$table = "inscriptions"; // Table des inscriptions
?>
Le fichier verifauth.php
Dans ce fichier nous allons vérifier que le login et le mot de
passe de la session de l'utilisateur sont inscrits dans la base de donnée
et aussi par mesure de sécurité, on vérifie que l'adresse
ip de l'utilisateur n'a pas changé par rapport à l'adresse
ip de l'inscription du login et du mot de passe, ceci et une mesure de
sécurité au cas ou un utilisateur mal intentionné
aurait dérobé l'identificateur de session du vrai utilisateur
en voulant se faire passer pour lui.
On vérifie que la paire login/pass et correct, si tout est correct
c'est que le visiteur c'est loggué, on affiche la page sinon on
redirige le visiteur sur la page d'accueil index.php avec un message d'erreur.
Codage:
<?
/* Adresse IP du visiteur de notre page Web */
$REMOTE_ADDR=getenv("REMOTE_ADDR");
/* Fonction de filtre des caractères */
function filtrelog($valeur)
{
return ereg("^[a-zA-Z0-9]+$",$valeur);
}
/* Fonction de vérification du login et du mot de passe dans la
base de données */
function veriflog()
{
global $serveur,$loginsql,$passsql,$table,$base,$login,$pass;
$password=$pass;
if (!$login)
{
return false;
}
if (!filtrelog($login))
{
return false;
}
if (!$password)
{
return false;
}
if (!filtrelog($password))
{
return false;
}
// Connexion au serveur
$id=@mysql_pconnect($serveur,$loginsql,$passsql) or die("Impossible
de se connecter à la base de donnée<br>".mysql_error());
mysql_select_db("$base");
// Sélection de la table
$Requete = " SELECT login, pass ";
$Requete.= " FROM $table ";
$Requete.= " WHERE login = '$login' AND pass = '$password' ";
$result = @mysql_query($Requete,$id) or die("Requete invalide");
// retoune le nombre d'enregistrements dans la table ( ligne )
$lignes = mysql_num_rows($result);
if ($lignes<1) return false;
else
{
$res=mysql_fetch_row($result);
if ($res[0]==$login && $res[1]==$password) return true;
else return false;
}
}
if ( $login!="" && $pass!="" && $id_session!=""
&& $adresse_ip==$REMOTE_ADDR)
{
if ( !(veriflog()) )
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du
passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); // toute le temps différente
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache");
$erreur="Erreur Login ou Mot de Passe incorrect";
include($index);
exit();
}
}else
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du
passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); // toute le temps différente
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache");
$erreur="Erreur Login ou Mot de Passe incorrect";
include($index);
exit();
}
?>
Le fichier login.php
Dans ce fichier nous allons vérifier que le login et le mot de
passe saisi par l'utilisateur sont inscrits dans la base de donnée,
on récupère l'adresse ip du visiteur et son numéro
d'identification et on vérifie que la paire login/pass et correct,
si tout est correct on affiche la page d'accueil des utilisateurs loggués
(indexlog.php) sinon on affiche un message d'erreur.
Codage:
<?
include("auth.php");
/* Adresse IP du visiteur de notre page Web */
$REMOTE_ADDR=getenv("REMOTE_ADDR");
/* On enregistre nos variables de la session */
session_register("login");
session_register("pass");
session_register("id_session");
session_register("adresse_ip");
function filtre($valeur)
{
return ereg("^[a-zA-Z0-9]+$",$valeur);
}
function login()
{
global $serveur,$loginsql,$passsql,$table,$base,$log,$pwd,$erreur;
$login=$log;
$password=$pwd;
if (!$login)
{
$erreur="Erreur le champs du Login est vide";
return false;
}
if (!filtre($login))
{
$erreur="Erreur le Login doit contenir seulement des chiffres ou
des lettres";
return false;
}
if (!$password)
{
$erreur="Erreur le champs du Mot de Passe est vide";
return false;
}
if (!filtre($password))
{
$erreur="Erreur le Mot de Passe doit contenir seulement des chiffres
ou des lettres";
return false;
}
// Connexion au serveur
$id=@mysql_connect($serveur,$loginsql,$passsql) or die("Impossible
de se connecter à la base de donnée");
@mysql_select_db("$base") or die("<br>Impossible
de séléctionner la base: $base<br>".mysql_error());
// Sélection de la table
$Requete = " SELECT login, pass ";
$Requete.= " FROM $table ";
$Requete.= " WHERE login = '$login' AND pass = '$password' ";
$result = mysql_query($Requete,$id) or die("Requete de vérification
de Login et Mot de Passe invalide: ".mysql_error());
// retoune le nombre d'enregistrements dans la table ( ligne )
$lignes = mysql_num_rows($result);
if ($lignes<1)
{
$erreur="Erreur Login ou Mot de Passe incorrect";
$pwd="";
return false;
}
else
{
$res=mysql_fetch_row($result);
if ($res[0]==$login && $res[1]==$password)
{
return true;
}
else
{
$erreur="Erreur Login ou Mot de Passe incorrect";
$pwd="";
return false;
}
}
}
if (!login())
{
session_destroy();
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du
passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); // toute le temps différente
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
include($index);
exit();
}
else
{
$login=$log;
$pass=$pwd;
$id_session=session_id();
$adresse_ip=$REMOTE_ADDR;
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du
passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); // toute le temps différente
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
include($index);
}
?>
Le fichier logout.php
On détruit la session, comme vous pourrez le remarquer la fonction
session_destroy() n'ets pas utilisée car celle-ci ne fonctionne
pas correctement et ne détruit pas le fichier instantanément
donc on se contente de vider les variables de session et de les détruires.
<?
include("config.php");
session_name($sessname);
session_start();
$login="";
$pass="";
$id_session="";
session_unregister($login);
session_unregister($pass);
session_unregister($id_session);
// redirectione vers l'URL $index.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du
passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); // toute le temps différente
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache");
include($index);
exit();
?>
Benjamin Vernoux
|