Vous êtes ici Articles > Comment reconnecter les utilisateurs automatiquement à un espace membre

 

Comment reconnecter les utilisateurs automatiquement à un espace membre

Du coté PHP
 
KOogar
Vu 1982 fois
Enregistré le 23 Juil 2008
  • Digg cet article sur digg.com
  • Bookmark cet article sur del.icio.us
  • Bookmark cet article sur Google
  • Bookmark cet article sur Yahoo
  • Ajoute Comment reconnecter les utilisateurs automatiquement à un espace membre
  • Partage cet article sur Facebook
 
 
 
 

Comment reconnecter les utilisateurs automatiquement à 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.

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.

Commentaires
Une petite question ... Est-ce que ce que le membre était en train de rédiger sera perdu ? Ou bien il sera renvoyé par l'autolog ?
 
C'est le but !! Conserver les données d'un formulaire ou d'une session. Essayons de comprendre le chemin si vous le permettez: Les données d'un formulaire sont envoyées au serveur qui les stocke dans son tableau de $global, ensuite le serveur aprés la redirection et le redemarrage de la session renvoie la page au navigateur. A aucun moment le tableau des globals n'est affecté et les données de l'internaute sont conservés. Pour les données conservées dans la session il en va de même. Seul le stockage est différent puisque Le serveur les stocke dans un petit fichier sur son disque. Le redémarrage de la session n'affecte pas le fichier de session en cours. L'internaute aura de nouveau ses données de conservées !! Enjoy ^^ Ce système est idéal pour éviter de perdre des clients rageant aprés une grosse perte d'info "postée et perdue". Trés bonne continuation
 
Mettre le couple pseudo + mot de passe crypté dans un cookie, je suis peut être parano mais je favorise l'utilisation d'une 1 clé à la place du mot de passe. C'est exactement pareil sauf que si un jour le md5 est cassé (rien n'est immuable), le pirate n'aura pas le couple pseudo / mot de passe qui lui permettrons de se logguer depuis le formulaire. Bien sur il pourra en faire quelque chose mais c'est un cran supérieur, ça demande encore à batailler et un niveau technique un peu plus élevé. Après je ne dis pas qu'il faut faire un système super complexe, ça augmente les chances de laisser une faille toute bête :p
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Quelques articles qui devraient vous intéresser