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;
}