Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Utiliser les sessions en PHP

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par Qwix, le 16 mai 2008
  • Révision : lunatictac le 16/02/2009
  • Révision : lunatictac le 16/02/2009

Qu'est-ce qu'une session ?

Une session est un système permettant de conserver des valeurs de pages en pages, sans utiliser les paramètres d'url qui ne permettent pas de passer des données sensibles de pages en pages et dont le nombre maximum de caractères ne peut excéder 255, url comprise.

Pour pouvoir travailler avec les sessions, vous aurez besoin des fonctions suivantes:

  • session_destroy()
  • session_id()
  • session_start()
  • session_unset()

Bien sur, il en existe d'autres que vous pouvez utiliser à votre guise, vous trouverez la liste complète à cette adresse: http://www.nexen.net/docs/php/annotee/ref.session.php

Pour apprendre à utiliser les sessions, nous allons travailler directement sur un exemple concret, la création d'un espace sécurisé :

La table MYSQL utilisée

Pour utiliser un espace sécurisé, vous avez besoin au minimum d'une table qui contient les données utilisateurs, c'est à dire le login et le mot de passe associé. Voici un exemple de table que vous pourriez utiliser, bien sur vous pouvez rajouter des champs pour avoir plus d'informations sur les utilisateurs, la table présentée contient le minimum de données nécessaires pour une identification correcte.

CREATE TABLE user (
  id_user int(3) NOT NULL auto_increment,
  login_user varchar(10) NOT NULL default '',
  pass_user varchar(32) NOT NULL default '',
  PRIMARY KEY  (id_user)
)

Insertion d'un utilisateur

Pour pouvoir être inscrit sur le site et ainsi pénétrer dans l'espace sécurisé, vous devez avant tout créer un formulaire et un script qui permette d'insérer les données sur l'utilisateur. Je pars du principe que vous savez déjà récupérer et insérer des données dans une base de données, si ce n'est pas le cas ce tutorial devrait vous être utile.

La seule chose importante lors de l'insertion d'un utilisateur est le cryptage du mot de passe, nous allons utiliser la fonction md5(). Celle-ci est très efficace pour protéger des données sensibles, ainsi si votre base est piratée, le pirate sera dans l'impossibilité de récupérer le mot de passe étant donné qu'il est cryptée et que la clef de cryptage, c'est le mot de passe 'en clair', donc si vous ne connaissez pas le mot de passe, impossible de faire quoi que ce soit.

Voici le script PHP qui permet d'insérer un utilisateur:

<?php
/*
  si les champs de login et de mot de passe ne sont pas vides
  on insère l'utilisateur.
*/
if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")
{
  $login     = $_POST["login"];
  $pass      = md5($_POST["mot_de_passe"]) ;
 
  //connexion au serveur
  $cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
  //sélection de la base de données
  $db  = mysql_select_db(DB) ;
 
  //création de la requête SQL
  $sql = "INSERT INTO user (login_user, pass_user) VALUES ('".$login."', '".$pass."')"	;
  //exécution de la requête SQL
  $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error());
 
  //si la requête s'est bien passé, on affiche un message de succès
  if($requete)
  {
    echo "L'inscription s'est bien déroulée, <a href=\"index.php\">se connecter</a>" ;
  } //fin if
/*
  sinon on retourne à la page d'inscription
*/
else
{
  header("Location: suscribe.php") ;
}//fin else
?>

La ligne qui permet de crypter le mot de passe est celle-ci:

$pass      = md5($_POST["mot_de_passe"]) ;

Les données qui seront insérées dans la base seront donc maintenant sécurisées.

Normalement, ce script devrait aussi vérifier si l'utilisateur n'est pas déjà inscrit, mais afin de garder une certaine lisibilité, j'ai fait le choix de ne pas effectuer cette vérification.

identification d'un utilisateur

Pour pouvoir entrer dans l'espace sécurisé, l'utilisateur doit s'identifier. Pour cela il suffit de faire un simple script PHP qui récupère les données correspondantes à l'utilisateur:

/*
  si les champs de login et de mot de passe ne sont pas vides
  on insère l'utilisateur.
*/
if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")
{
  $login     = $_POST["login"] ;
  $pass      = md5($_POST["mot_de_passe"]) ;
 
  //connexion au serveur
  $cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
  //sélection de la base de données
  $db  = mysql_select_db(DB) ;
 
  //création de la requête SQL
  $sql = "SELECT * FROM user WHERE login_user = '".$login."' AND pass_user = '".$pass."'"	;
  //exécution de la requête SQL
  $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  //on récupère le résultat
  $result = mysql_fetch_object($requete) ;
  //si la requête s'est bien passée
  if(is_object($result))
  {
    //début de la sessions
    session_start() ;
    //enregistrement d'une variable de session, ici le login de l'utilisateur
    $_SESSION["login"] = $login ;
 
    header("Location: page1.php") ;
  }//fin if
  //sinon on retourne à la page d'inscription
  else
  {
    header("Location: index.php") ;
  }//fin else
}//fin if
/*
  sinon on retourne à la page d'inscription
*/
else
{
  header("Location: index.php") ;
}//fin else

La ligne,intéressante dans ce script est celle-ci:

$pass      = md5($_POST["mot_de_passe"]) ;

Nous avons vu plus haut que le mot de passe est crypté via l'algorithme 'md5' et que la clef de cryptage est le mot de passe lui-même. Pour savoir si le mot de passe tapé est le bon, il faut donc crypter celui saisi par l'utilisateur, et le comparer à celui présent dans la base de données, si les deux valeurs sont identiques, alors le mot de passe est correct, sinon le mot de passe est faux.

Prenons un exemple simple : J'utilise le login 'qwix' et le mot de passe '12345'. Après cryptage, '12345' donne '827ccb0eea8a706c4c34a16891f84e7b'. Lors de l'identification nous allons donc crypter le mot de passe saisi par le visiteur et si la valeur après cryptage vaut '827ccb0eea8a706c4c34a16891f84e7b' le mot de passe est correct, sinon il est incorrect.

Un peu plus loin dans le script vous avez pu remarquer ces lignes:

//début de la session
session_start() ;
//enregistrement d'une variable de session, ici le login de l'utilisateur
$_SESSION["login"] = $login ;

C'est là que commence l'utilisation des sessions, session_start() permet de commencer un nouvelle session cette fonction doit toujours être appelée avant toute autre fonction utilisant les fonctions de sessions, de plus si vous mélangez HTML et PHP, session_start() doit être la toute première ligne de code de votre page, aucun code ne doit se trouver avant :!:

Avec session_start() la session est commencé, désormais nous pouvons enregistrer ce que l'on appelle des variables de sessions. Ces variables de sessions sont très pratiques car elles se transmettent automatiquement de pages en pages. Ainsi:

$_SESSION["login"] = $login ;

permet d'enregistrer une variable de sessions appelée “login” qui aura pour valeur le login de l'utilisateur.

Si toutefois vous souhaitez, lors d'un débugage, vérifier si vos variables de sessions sont bien créées, le morceau de code suivant vous permettra de toutes les afficher si elles existent:

<?php
echo("<pre>") ;
print_r($_SESSION) ;
echo("</pre>") ;
?>

Maintenant que nous avons vu comment identifier un utilisateur, voyons comment utiliser les sessions à travers différentes pages :

Utilisation des sessions à travers les pages

Travailler avec les sessions n'est pas compliqué, pour pouvoir récupérer des données de pages en pages, il suffit d'enregistrer des variables de sessions qui seront valides pendant tout les durée de la session. Voyons le code d'une page type:

<?php
session_start() ;
if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")
{	
  header("Location: index.php") ;
}//fin if
else
{
  echo("<pre>") ;
  print_r($_SESSION) ;
  echo("</pre>") ;
  echo("Votre identifiant de session est ".session_id()."<br/>") ;
  echo("Bonjour ".$_SESSION["login"]." vous êtes maintenant sur la page 1<br/>") ; 
  echo("Pour allez à la page 2, cliquez <a href=\"page2.php\">ici</a><br/>") ;
  echo("Pour vous déconnecter, cliquez <a href=\"logout.php\">ici</a><br/>") ;
}//fin else
?>

Comme vous pouvez le constater, c'est très simple, en tout premier lieu, on vérifie si la variable de sessions 'login' existe et si elle n'est pas vide. Si ce n'est pas le cas alors c'est qu'un utilisateur essaie de rentrer dans l'espace sans avoir été autorisé, on redirige donc l'utilisateur vers la page d'acceuil pour qu'il se connecte. Si cette variable existe et est correcte, alors on affiche diverses informations comme, l'identifiant de sessions de l'utilsateur, son nom…

Déconnexion et destruction de la session

Là encore les session sont très faciles à utiliser. Voyons une page type de déconnexion:

<?php
  session_start() ;
  //destruction de toutes les variable de sessions
  session_unset() ;
  //destruction de la session
  session_destroy() ;
 
  header("location: index.php") ;
?>

Il suffit d'utiliser les trois fonctions:

  • session_start()
  • session_unset()
  • session_destroy()

pour détruire une session, et ensuite de rediriger l'utilisateur vers la page de votre choix.




Tutorial de Qwix