Principe Gestion Multi-Utilisateur

Qu'est ce que les sessions en PHP

Site professionnel utilisant les sessions en PHP

Notre formulaire d'inscription en HTML

Explication des champs de la table inscriptions

Visualisation de l'enregistrement des inscriptions avec phpMyAdmin

Traitement des données envoyées par le formulaire formulaire.htm
 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">&nbsp; <b><font face="Arial, Helvetica, sans-serif" color="#400040" size="6">VALIDATION
DE L'INSCRIPTION</font><br>
&nbsp;</b>&nbsp; <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