Page 1 sur 1

Problème de déconnexion

Posté : 02 déc. 2008, 22:27
par BaLiSTiK
Bonjour.

J ai décidé de recoder tout mon blog afin de le passer en PHP5. L'affichage des articles, commentaires est nickel. J ai juste un problème avec les utilisateurs : j arrive à faire sans probleme une connexion...mais la deconnexion pose soucis. Je ne sais pas vraiment comment détruire ma variable de session "partout" (malgré session_unset() session_detroy() ).

Pour vous expliquer voila le code.
On va partir de la page article par exemple qui affiche un article.
J ai ma boite de connexion/deconnexion que j appele par
include 'auth.php';
Elle contient le code suivant :

	require('connexion.class.php');
	$oConnex = "";
	
	echo '<form method="post" action="" name="frmLogin">';
	//si la variable de session connexion n existe pas
	//on cree l objet conenxion
	if (!isset($_SESSION['connex'])) {
		$oConnex = new connexion();
		echo $oConnex->m_bMessage;	
	}
	//dans le cas ou elle existe
	//on deserialize l objet
	else {
		//Restauration de l'objet sérialisé
		$oConnex = unserialize(urldecode($_SESSION['connex']));
	}
	$oConnex->_verifFormConnexion();
	if($oConnex->m_bUserOK){
		$_SESSION['id']		=	$oConnex->m_aLogin['id_fonfon'];
		$_SESSION['login']	=	$oConnex->m_aLogin['login'];
		$_SESSION['level']	=	$oConnex->m_aLogin['level'];
		//$_SESSION['connex'] = $oConnex;
		echo '<p align="center"><input type="submit" value="Deconnexion" name="btnLogout" style="border:1px solid #eeeeee;" /></p>';
	}else{

	$form = '&nbsp;<p><strong>Connexion :</strong><br />';
	$form .= '&nbsp;Pseudo';
	$form .= '&nbsp;<input type="text" name="login" style="border:#999999 1px solid;" size="20" /><br /><br />';
	$form .= '&nbsp;Mot de passe';
	$form .= '&nbsp;<input type="password" name="pass" style="border:#999999 1px solid;" size="20" /><br /><br />';
	$form .= '&nbsp;<input type="submit" value="Connexion" style="border:#999999 1px solid;" />';
	$form .= '&nbsp;<input type="reset" value="Effacer" style="border:#999999 1px solid;" />
	</p>';
	$form .= '<p>&bull;&nbsp;<a href="">Inscription &agrave; FoNfOnLaNd</a></p>';
       echo $form;

	}
echo '</form>';

$_SESSION['connex'] = urlencode(serialize($oConnex)
Ma classe connexion.class.php est comme ceci :

require_once('connexionBD.php');
class connexion{
	
	var $m_bUserOK = false;
	var $m_bMessage;
	//function __destruct(){
	//}
	
	function _verifFormConnexion(){
		
		$this->m_nAccesBD = new connexionBD();
		if(isset($_POST['login']) && isset($_POST['pass'])){
			if(empty($_POST['login']) || empty($_POST['pass'])){
				$this->m_bMessage = '<p style="color:#FF0000">Le login et/ou le mot de pass est vide!!</p>';
			}//fin if
			else{
				/*echo '<script type="text/javascript">alert("Test avec le login '.$_POST['login'].'");</script>';*/
				$this->_rechercherLogin($_POST['login'],$_POST['pass']);
			}//fin else
		}//fin if
		
		else if(isset($_POST['btnLogout'])){
			
			unset($this->m_bUserOK);
			unset($_SESSION['connex']);
			unset($this);
			$_SESSION = array(); 
			session_unset();
			session_destroy();
			//$this->_verifFormConnexion();
			$this->m_bMessage = '<p style="color:#FF0000">Vous &ecirc;tes d&eacute;connect&eacute;.</p>';
		}
		return $this->m_bMessage;
	}//fin methode

//Y a les méthodes de verification qui viennent ensuite
//retournant la variable booléenne $m_bUserOK
//true : connexion OK
//false : pas de connexion
Et donc j ai ma variable de session $_session['connex'].
Lorsque je continue ma page article, la boite en dessous contient des informations de l'user se trouvant ds user.php
if(isset($_SESSION['connex'])){
		require('user.class.php');
		try{
			$oUser = new user($_SESSION['id'],$_SESSION['login'],$_SESSION['level']); //objet User
			$oUser->_infoUser();
			$oUser->_nbreArticles(); 
			$oUser->_nbreComment();
				
			$infUser .= '<p align="center"><img src="'.$oUser->m_aInfoUser['avatar'].'" alt="avatar" style="border: 1px solid #000;" align="center" />';
			$infUser .= '<br /><strong>'.$oUser->m_aInfoUser['login'].'</strong>&nbsp;('.$oUser->m_aInfoUser['level'].')</p>';
			$infUser .= '<p>'.$oUser->m_aInfoUser['mail'].'<br />';
			
			$infUser .= 'Article(s) : '.$oUser->m_aNbrArticles['nbr_articles'].'<br />';
			$infUser .= 'Commentaire(s) : '.$oUser->m_aNbrComments['nbr_comms'].'</p>';//.'</p>';
			echo $infUser;
			$link = '<p>&nbsp;&bull;&nbsp;<a href="">Modifier ses informations</a></p>';
			$liste_level = array("admin");
			if(in_array($oUser->m_aInfoUser['level'],$liste_level)){
				$link .= '<p>&nbsp;&bull;&nbsp;<a href="">&Eacute;crire un article</a><br />';
				$link .= '&nbsp;&bull;&nbsp;<a href="">Modifier un article</a></p>';
			}
			echo $link;
		}catch(MyException $e){
			echo $e->getError();
		}
	}
Quand je suis connecté, ça s affiche nickel, normal. Mais lorsque j appuie sur deconnexion, ma variable $_session n est pas détruite partout et donc affiche des message d'erreur sur la boite d'info User et plus bas sur ma page, elle reste active.... Et pour l instant je n ai pas vraiment d'idée...

Merci d'avance :).

Posté : 03 déc. 2008, 13:28
par caroube
C'est normal, le
$_SESSION['connex'] = urlencode(serialize($oConnex)
Il ne manquerait pas une parenthèse et un ; ?

Posté : 03 déc. 2008, 17:13
par BaLiSTiK
C'est normal, le
$_SESSION['connex'] = urlencode(serialize($oConnex)
Il ne manquerait pas une parenthèse et un ; ?
Il est présent dans mon code, juste oublié lors de mon collage sur mon post.
Et si je le mettais comme ça :
 if($oConnex->m_bUserOK){
        $_SESSION['id']        =    $oConnex->m_aLogin['id_fonfon'];
        $_SESSION['login']    =    $oConnex->m_aLogin['login'];
        $_SESSION['level']    =    $oConnex->m_aLogin['level'];
        $_SESSION['connex'] = urlencode(serialize($oConnex)); 
}
?

EDIT : bon bah ça marche comme ça !!...la programmation me tuera ><