PHP INITIÉ - Reconnexion automatique à un espace membre

PHP INITIÉ - Reconnexion automatique à un espace membre

Nous avons pour beaucoup d'entre nous des espaces membres ou les utilisateurs postent des news, des infos, mette à jour leurs informations..
Que se passe t-il lorsque la session se termine au bout de 30 secondes. Si l'utilisateur est en train de poster un texte, il va très certainement perdre son texte s'il n'y a pas un système pour le reloger automatiquement.

Pour avoir un tel système, il faut travailler avec les cookies. Le but est simple, le pseudo et le mot de passe (crypté en MD5) de l'utilisateur sont contenus dans le cookie et à chaque chargement de page, nous allons vérifier si la session est terminée. Si elle l'est, nous allons récupérer le pseudo et le mot de passe (crypté en MD5) contenu dans le cookie et redémarrer la session de manière transparente.

PHP INITIÉ - Reconnexion automatique à un espace membre

Le cookie doit naturellement contenir le pseudo (ou nom de l'utilisateur) et par sécurité le password. Ce dernier est optionnel dans l'application qui suit.

.01
.02
.03
.04
 
<?php
setcookie
('nom_cookie', $pseudo . '#' . $password, ( time() + 86400 * 90 ));
?>


Voici la fonction qui va vérifier si la session est toujours active, dans le cas contraire nous appellerons le fichier log.php.
Cette fonction autolog() est à placer sur toute les pages protéger par une session. La "cle_client" est dans l'exemple la session inactive.
.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
.13
.14
.15
.16
.17
 
<?php

session_start
();
function
autolog()
{
    if(!isset(
$_SESSION['cle_client']) && isset($_COOKIE['nom_cookie']))
    {
   
// on stoke la page en cours
   
$page = $_SERVER['PHP_SELF'];
   
// on fait la redirection vers le fichier de log
   
header('location: log.php?redirect=' . $page);
    exit;
    }
}

?>


Fichier log.php qui permet de renvoyer sur la page, recharger la session et de gérer les erreurs.
.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
.13
.14
.15
.16
.17
.18
.19
.20
.21
.22
.23
.24
.25
.26
.27
.28
.29
.30
.31
.32
.33
.34
.35
.36
.37
.38
.39
 
<?php

session_start
();
// on va aller chercher le speudo dans le cookie
if(isset($_COOKIE['nom_cookie']))
{
$tc = explode('#', $_COOKIE['nom_cookie']);
$pseudo=isset($tc[0]) ? ( get_magic_quotes_gpc() ? $tc[0] : $tc[0]) : '';
$password = isset($tc[1]) ? $tc[1] : '';
$cookie = 1;
}

 
// on va cherche le speudo dans la table et les autres champs
 
$result = mysql_query("SELECT id, pseudo, password
                          FROM table
                          WHERE pseudo = '
$pseudo' AND password = '$password'");
 
$row = mysql_fetch_array ($result);

  if(
mysql_num_rows($result) == 1)
    {
 
// on remet le speudo dans la session
 
$_SESSION['pseudo'] = get_magic_quotes_gpc() ? $pseudo : stripslashes($pseudo);
 
$_SESSION['cle_client'] = $row['id'];
  }
 
// et on fait la redirection

if($cookie)
    {
        if(isset(
$_GET['redirect']) && !empty($_GET['redirect']))
           
header('location: ' . $_GET['redirect']);
        else
           
header('location: index.php');
    }
    else
       
header('location: autre_url.php');
    }
}
?>


Il est maintenant possible de placer la fonction autolog() sur toute les pages protéger par session. Les utilisateurs devraient être plus a l'aise pour poster leurs informations sur votre espace membre. Le fichier log.php est puissant car il devrait vous permettre de jouer avec différente redirection.
Vous pouvez également passer par ce fichier de log pour terminer la session ou supprimer le cookie en cas de désabonnement de l'utilisateur.