Bonjour,
Je suis actuellement en train de dev. un petit site pour un ami et j'ai un problème pour gérer la connexion des membres, la structure du site est la même que sur un ancien tuto de grafikart c'est à dire qu'il y a un index.php à la racine du projet qui fait un require du model puis se connecte à la BDD et enfin inclus la page dont le chemin lui a été passé dans $_GET'p'].
J'ai donc modifier ce index.php afin de rajouter un petit bout de code mais qui n'a pas l'air de fonctionner de page en page :
if (isset ($_COOKIE'JetonSession']) && isset ($_COOKIE'Email'])) {
/* Traitement des données */
}
else {
echo "DEBUG : Vous n'êtes pas connecté.</br>";
define("ID_MEMBRE",0);
}
Malheureusement avec cette méthode je ne comprends pas pourquoi la condition se retrouve parfois sur FALSE ce qui nous amène dans le bloc du else, logiquement une fois le cookie créé le isset ($_COOKIE'']) devrait tout le temps renvoyer TRUE jusqu'à expiration de celui-ci non ?
Voici d'autres parties de codes qui pourraient vous aider à m'aider :
index.php complet :
<?php
require('model/model.class.php');
//Si le site est sur le serveur de production mettre cette variable sur 1.
$release = 1;
if(!$release) {
define('WEBROOT','http://localhost/public/ProjetKoala/');
$log_mysql_server ='localhost';
$log_mysql_pseudo ='root';
$log_mysql_password =' *******';
}
else {
/* Partie cachée */
}
/ ***************CONNEXION A LA BDD********* /
$connect = @mysql_connect($log_mysql_server,$log_mysql_pseudo,$log_mysql_password);
//$connect =0;
if($connect) {mysql_select_db('maplaced');}
//else { echo '<div style="width: 99%;background-color:#ffffff;color:red;margin:auto;font-weight:bold;">La BDD est injoignable, merci de réésayer plus tard.<br/>Si le problème persiste merci de contacter l\'administrateur.</div>';}
/ ************FIN CONNEXION A LA BDD********* /
/ **Vérification de la connection du membre** /
$Connexion = Model::load('membre','Membre');
if (isset ($_COOKIE'JetonSession']) && isset ($_COOKIE'Email'])) {
$JetonSession = mysql_real_escape_string (htmlspecialchars ($_COOKIE'JetonSession']));
$Email = mysql_real_escape_string (htmlspecialchars ($_COOKIE'Email']));
$IdMembre = $Connexion -> EmailVersId ($Email);
//Si on a trouvé un jeton correspondant avec l'id associé à l'email
if($IdMembre != 0 && $Connexion -> CorrespondanceSession ($IdMembre, $JetonSession)) {
$Connexion -> RepousserExpirationSession ($IdMembre);
define("ID_MEMBRE",$IdMembre);
$Donnees = $Connexion -> find(array(
"conditions" => "Id = '".ID_MEMBRE."'"
));
$Donnees = $Donnees[0];
define("PSEUDO_MEMBRE",$Donnees'Pseudo']);
define("EMAIL_MEMBRE",$Donnees'Email']);
define("BANNI_MEMBRE",$Donnees'Banni']);
}
else {
define("ID_MEMBRE",0);
}
}
else {
echo "DEBUG : Vous n'êtes pas connecté.</br>";
define("ID_MEMBRE",0);
}
//Variable tableau contenant les pages nécessitant absolument d'être connecté sur le site.
$PageConnecte = array ("membre/profil","concours/ajouter");
//Boucle de redirection vers la page d'accueil en cas d'accès à une page membre hors connexion
if((isset($_GET'p']) && ID_MEMBRE == 0) || BANNI_MEMBRE == 1){
foreach($PageConnecte as $v){
if($v == $_GET'p'])
$_GET'p'] = 'update';
} // foreach ()
} // if()
if(!isset($_GET'p'])){ $_GET'p'] = "index"; } //Page d'accueil
if(!file_exists('content/'.$_GET'p'].'.php')) { $_GET'p'] = '404';}
ob_start();
include 'content/'.$_GET'p'].'.php';
$current_path = $_GET'p'];
$contenu = ob_get_contents();
ob_end_clean();
include 'content/template.php';
mysql_close($connect);
?>
Et les méthodes correspondants à la gestion des sessions utilisateurs :
public function CreerSession ($IdMembre) {
$old_table = $this-> table;
$this -> table = "Membre_session";
$IdMembre = mysql_real_escape_string (htmlspecialchars ($IdMembre));
//Récupération de l'email correspondante
$this -> table = $old_table;
$Data = $this -> find ( array(
"conditions" => "Id = '".$IdMembre."'"
));
$Email = $Data[0]'Email'];
$this -> table = "Membre_session";
//Génération d'un jeton
$JetonSession = sha1(rand());
//Définition du temps d'expiration de la session
$TempsExpiration = time() + (60*60) * 24 * 7; // 60 * 60 * 24 * 7 = 1h * 24 * 7 = 1 jour * 7 = 1 semaine
$DataSession = $this -> find( array(
"conditions" => "IdMembre = '".$IdMembre."'"
));
//S'il n'y a pas de session on en créer une
if (count ($DataSession) == 0) {
$sql = "INSERT INTO Membre_session(IdMembre, JetonSession, Creation, Expiration)
VALUES ('".$IdMembre."','".$JetonSession."','".$this -> ActualDatetime ()."','".$this -> ActualDatetime ($TempsExpiration)."')";
mysql_query ($sql);
}
//Sinon on remplace l'ancienne.
else {
$this -> save (array(
"IdMembre" => $IdMembre,
"JetonSession" => $JetonSession,
"Creation" => $this -> ActualDatetime (),
"Expiration"=> $this -> ActualDatetime ($TempsExpiration)
), "IdMembre");
}
//Ensuite on créer les cookies correspondant.
setcookie("JetonSession", $JetonSession, $TempsExpiration);
setcookie("Email", $Email, $TempsExpiration);
$this -> table = $old_table;
}
public function CorrespondanceSession ($IdMembre, $Jeton) {
$old_table = $this-> table;
$this -> table = "Membre_session";
$IdMembre = mysql_real_escape_string (htmlspecialchars ($IdMembre));
$Jeton = mysql_real_escape_string (htmlspecialchars ($Jeton));
$Data =$this -> find(array (
"conditions" => "IdMembre = '".$IdMembre."' && JetonSession = '".$Jeton."'"
));
$this -> table = $old_table;
if( isset($Data[0])) {
return true;
}
else {
return false;
}
}
public function RepousserExpirationSession ($IdMembre) {
$old_table = $this-> table;
$this -> table = "Membre_session";
//Définition du temps d'expiration de la session
$TempsExpiration = time() + (60*60) * 24 * 7; // 60 * 60 * 24 * 7 = 1h * 24 * 7 = 1 jour * 7 = 1 semaine
$IdMembre = mysql_real_escape_string (htmlspecialchars ($IdMembre));
//Le nouveau temps d'expiration devient :
$this -> save (array(
"IdMembre" => $IdMembre,
"Expiration"=> $this -> ActualDatetime ($TempsExpiration)
), "IdMembre");
$this -> table = $old_table;
}
Je vous remercie d'avance pour une éventuelle aide de votre part,
Wapaca.