Session, déconnexion marche pas, ID conservé [Résolu]

Signaler
Messages postés
39
Date d'inscription
vendredi 16 janvier 2004
Statut
Membre
Dernière intervention
24 novembre 2010
-
Messages postés
39
Date d'inscription
vendredi 16 janvier 2004
Statut
Membre
Dernière intervention
24 novembre 2010
-
bonjour,
je ne comprends pas, quand je déconnecte, et que je me reconnecte (sans fermer IE), l'id de la session est repris.
si je me déconnecte, que je ferme IE et que je me reconnecte, j'ai bien une nouvelle session avec un nouvel id qui est créé.
Comment faire pour forcer la destruction TOTALE de la session sans quitter IE et avoir un nouvel id de session à la reconnexion svp ?
MERCI D'AVANC
...et voilà mes script :
le script de gestion des log/unlog :
<?php
require_once ("Normalisation.php");
require_once ("WebSession.class.php");
session_start();
Normalisation();


$user_email   = '';
$user_name    = '';
$user_firstname = '';


$db = new DBMySQL(DB_USER, DB_PASSWORD, DB_BASENAME, DB_HOST);


//On instancie un nouvel objet session
$session = new WebSession(session_id());

if (isSet($_POST['unlog']))
{
   $session->Destroy();
   //je réaffiche la page de connexion
}


if ($session->ExistSession())
{
    if ($session->IsValidSession())
    {
        $session->Destroy();
        $errorMessage = "Une session existait déjà sur ce poste, elle a été détruite, veuillez vous reconnecter.";
        $tbs->LoadTemplate("../tpl/Identification.tpl");
    }
}
else
{
    //pas de session existante : si il y a eu un post valide, on inscrit
    if (isSet($_POST["user_email"]) and  ($_POST["user_email"]<>""))
    {
        $resultCS = $session->CreateSession($_POST["user_email"], $_POST["user_passweb"]);
        if ($resultCS)
        {
            //si c'est ok on affiche la page
        }
        else
        {
            //on affiche la page d'erreur de log
        }
    }
    else
    {
        //là c'est un petit rigolo, on le redirige vers l'identification
    }
}
?>
là le script de gestion des sessions (j'écris dans MYSQL) :
<?php
require_once ("Connect.php");
require_once ("DBMySQL.class.php");


class WebSession
{
 //Partie privée : les propriétés
 //*********************************************************************
 private $sess_id    = '';
 private $user_name   = '';
 private $user_firstname = '';
 private $user_email   = '';
 private $sess_credat  = '';
 
 private $errorMessage  = '';
 private $sessionExist  = false;
 private $sessionValid  = false;
 
 private $db;


 //--Constructeur
 //*********************************************************************
 function WebSession($session_id)
 {
  $this->db = new DBMySQL (DB_USER, DB_PASSWORD, DB_BASENAME, DB_HOST);
  
  $this->sess_id   = $session_id;
  $this->sess_credat = date("Y-m-d");
    $query     "SELECT * FROM websession WHERE session_id '$this->sess_id' " ;
  $queryResult  = $this->db->ExecuteQuery ($query);
  $session    = $this->db->NextObject ($queryResult);
  
  if(is_object($session))
  {
   //La session existe, on affecte les propriétés
   $this->sessionExist  = true;
   $this->user_name   = $session->user_name;
   $this->user_firstname = $session->user_firstname;
   $this->user_email   = $session->user_email;
   
   //Maintenant, on vérifie que le temps limite n'est pas dépassé
   $now = date ("U");
   if ($session->limit_time < $now)
   {
    $this->Destroy();
    $this->sessionExist  = false;
    $this->sessionValid  = false;
   }
   else
   {
    $this->sessionValid  = true;
   }
  }
  else
  {
   $this->errorMessage = "Désolés, aucune session n'est enregistrée, veuillez vous identifier.";
  }
 }
 


 //Fonction de Création d'une session utilisateur
 //****************************************************************************
 //retourne :
 // - true si l'utilisateur existe après avoir inséré une ouverture de session
 // - false si l'utilisateur n'existe pas ou si le mot de passe est faux
 function CreateSession($user_email, $user_passweb)
 {
  $this->user_email = $this->db->CleanStringForSQL($user_email);
    $queryResult  $this->db->ExecuteQuery("SELECT * FROM user WHERE user_email '$this->user_email'");
  $user     = $this->db->NextObject ($queryResult);
   
  if(is_object($user))
  {
   //vérification du mot de passe
   if($user->user_passweb == md5($user_passweb))
   {
    //Insertion dans la table pour 1 heure
    $now = date("U");
    $limit_time = $now + 3600;
    
    $this->user_name   = $user->user_name;
    $this->user_firstname = $user->user_firstname;
    $this->user_email   = $user->user_email;
    $this->sess_credat = date("Y-m-d");
    
    $query = "INSERT INTO websession (session_id, user_email, user_name, "
          . "user_firstname, limit_time, sess_credat) VALUES ('$this->sess_id', "
          . "'$this->user_email', '$this->user_name', '$this->user_firstname', "
          . "'$limit_time', '$this->sess_credat')";
  
    $queryResult = $this->db->ExecuteQuery($query);
     
    return true;
   }
   else
   {
    $this->errorMessage = "Mot de passe incorrect !";
    return false;
   }
  }
  else
  {
   $this->errorMessage = "L'utilisateur $user_email est inconnu !";
   return false;
  }
 }


 //Fonction de mise à jour d'une session utilisateur (quand il change ses coordonnées !)
 //****************************************************************************
 function UpdateSession($new_email)
 {
  $old_email = $this->user_email;
  $this->user_email = $this->db->CleanStringForSQL($new_email);
  
  $query     = "SELECT user_name, user_firstname FROM user where user_email='".$this->user_email."'";
  $queryResult  = $this->db->ExecuteQuery($query);
  $resObj    = $this->db->NextObject($queryResult);


  $query = "UPDATE websession SET user_email='" . $this->user_email . "', "
                 . "user_name='" . $resObj->user_name . "', "
                . "user_firstname='" . $resObj->user_firstname . "' "
                . "WHERE session_id = '$this->sess_id'";
  $this->db->ExecuteQuery($query);
 }


 // Retourne le nom d'utilisateur de la session
 public function GetUserFirstname()
 {
  return $this->user_firstname;   
 } 
 
 // Retourne le prénom d'utilisateur de la session
 public function GetUserName()
 {
  return $this->user_name;   
 } 
 
 // Retourne l'email de l'utilisateur de la session courante
 public function GetUserEmail()
 {
  return $this->user_email;   
 } 
 
 //Retourne la validité de la session courante
 //****************************************************************************
 public function IsValidSession()
 {
  return $this->sessionValid;
 }
 
 //Retourne true si on session existe, false sinon
 //****************************************************************************
 public function ExistSession()
 {
  return $this->sessionExist;
 }
 
 //Retourne le message d'erreur
 //****************************************************************************
 public function GetErrorMessage()
 {
  return $this->errorMessage;
 }
 
 //Détruit la session en cours
 //****************************************************************************
 public function Destroy()
 {
  session_unset();
  session_destroy ();

    $query "DELETE FROM websession WHERE session_id'$this->sess_id'";
  $result = $this->db->ExecuteQuery($query);
  
  $this->sessionValid  = false;
  $this->sessionExist  = false;
 }

2 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Messages postés
39
Date d'inscription
vendredi 16 janvier 2004
Statut
Membre
Dernière intervention
24 novembre 2010

Super, je comprends pas il me semblait avoir essayé mais la ça marche !
je vais pas chercher à comprendre.
merci !