Session, déconnexion marche pas, ID conservé

Résolu
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010 - 31 août 2007 à 11:43
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010 - 31 août 2007 à 17:09
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

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
31 août 2007 à 12:15
3
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010
31 août 2007 à 17:09
Super, je comprends pas il me semblait avoir essayé mais la ça marche !
je vais pas chercher à comprendre.
merci !
0
Rejoignez-nous