Page 1 sur 1

Protéger une page utilisateurs

Posté : 23 nov. 2013, 11:51
par yosaku
Salut ! Voilà sur mon site je souhaiterai réservé l’accès à certaines pages uniquement pour les membres.

Dans ce but j'utilise une fonction qui renvois true ou false si la personne est connecté.

Voici l'exemple d'une page membre :
<?php include("inclusion/top_inc.php");  
 if($user >0) {
 	?>
	 <article> <!-- /// Partie contenu \\\ --> 
	        <h2 id="top_section"><?php echo $_SESSION['Auth']['etat']; ?></h2>
	            <div id="conteneur_texte"> <!-- /// Contenu article \\\ --> 
					<div id="conteneur_photo_membre2">
						<div id="photo_profil_membre"><img class="img_user2" src="<?php echo $_SESSION['Auth']['image']; ?>"></div>
					<a href="modifier_image.php">Modifier</a>
					</div>
					<h3><?php echo $_SESSION['Auth']['nom'] .' '. $_SESSION['Auth']['prenom']; ?></h3>
					<?php mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
		            mysql_select_db(DB_BDD);
		            mysql_query ('SET NAMES "UTF8"');
					$id_user = $_SESSION['Auth']['id'];
					$sql = "SELECT * FROM  membre WHERE id=$id_user";
		            $req2 = mysql_query($sql) or die('Erreur SQL !<br />' .$sql. '<br />' .mysql_error());
		            while ($data2 = mysql_fetch_assoc($req2)) {
		                $date_naissance = htmlentities($data2['date']);
						$adresse = htmlentities($data2['adresse']);
						$ville = htmlentities($data2['ville']);
						$codep = htmlentities($data2['codep']);
						$tel = htmlentities($data2['tel']);
		            } ?>
					
					 <ul id="liste_profil">
					 	<li><p class="liste_profil_li">Mail :<span class="champ_profil_user"><?php echo $_SESSION['Auth']['mail'] ?></span></p></li>
					 	<li><p class="liste_profil_li">Date de naissance :<span class="champ_profil_user"><?php echo $date_naissance; ?></p></li>
					 	<li><p class="liste_profil_li">Adresse :<span class="champ_profil_user"><?php echo $adresse ?></span></p></li>
					 	<li><p class="liste_profil_li">Ville :<span class="champ_profil_user"><?php echo $ville ?></span></p></li>
					 	<li><p class="liste_profil_li">Code postal :<span class="champ_profil_user"><?php echo $codep ?></span></p></li>
					 	<li><p class="liste_profil_li">Téléphone :<span class="champ_profil_user"><?php echo $tel ?></span></p></li>
					 </ul>    
					 <i><p style="color: red;"><?php if($_SESSION['Auth']['niveau']){echo 'Vous êtes administrateur !';}?></p></i>     
				</div>
	    </article>
	</section>
	<?php include("inclusion/bottom_inc.php");
} 
 else { header('location:index.php'); 

} ?>
Tout va bien quand on est connecter mais une fois déconnecter j'ai cette erreur :
Warning: Cannot modify header information - headers already sent by (output started at /home/alcudia/www/inclusion/top_inc.php:134) in /home/alcudia/www/profil.php on line 40

Le problème c'est que je n'arrive pas à faire autrement car si je n'inclue pas mon header qui contient mon fichier config et donc ma fonction qui appel $user cela ne marche donc pas.

Si quelqu'un à une idée pour éviter d'avoir cette erreur, je suis preneur ^^

Merci d'avance.

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 13:10
par juliette
A pemière vu, ton fichier top_inc.php aurais déjà envoyer des infos pour construire la page donc php refuse de rediriger...

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 14:39
par yosaku
Oui en faite j'inclue mon fichier top_inc car dedans il a mon fichier config inclus. J'ai besoin de ce fichier config car il a ma fonction qui vérifie si la personne est connecté.

Si je ne met pas le fichier top_inc avant ma condition je ne pas avoir ma fonction de verification et si je ne le fait pas cela ne marche pas =(

Quelqu'un aurait une idée plus pratique pour protéger ma page membre en utilisant mes sessions contenu dans mon top_inc ?

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 14:50
par juliette
Bien comme tu ne montre pas ce top_inc, je vais te répondre d'appeller une fonction juste avant dans le genre:
function verifSession() {
    if (!isset($_SESSION['......']) || ($_SESSION['......']) === '') {
        header("location: 404.php");
        exit();
    }
}

verifSession()

include("inclusion/top_inc.php");
Mais ce n'est qu'une idée...

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 15:02
par moogli
Plus logiquement la vérification se fait dans le fichier top.
Ceci simplement parce que ce n'est pas la peine de faire un tas de chose spécifique a l'utilisateur si tu n'est pas connecté.

Tu peux imaginer de faire un truc un peux plus sexy pour l'utilisateur avec un beau message d'erreur et une redirection javascript (comme ici lorsque tu as posté un message même si ce n'est pas forcément pour la même raison ;)).

Sinon il faut un découpage plus logique de la chose (comme un mvc ;) ) mais c'est un poil plus complexe.

@+

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 15:26
par yosaku
Merci pour vos idées, je me laisserai bien tenter par une redirection en javascript mais le problème est que si on désactive qu'adviendra de ma page protégée =s

Edit :
Sinon j'ai essayer en gros de tester ma page comme ça :
<?php   
if (!isset($_SESSION['Auth']) || ($_SESSION['Auth']) === '') {
	header('location:index.php');
 	
} 
 else { 
 	include("inclusion/top_inc.php");
 	?>
	 <article> <!-- /// Partie contenu \\\ --> 
	        <h2 id="top_section"><?php echo $_SESSION['Auth']['etat']; ?></h2>
	            <div id="conteneur_texte"> <!-- /// Contenu article \\\ --> 
					<div id="conteneur_photo_membre2">
						<div id="photo_profil_membre"><img class="img_user2" src="<?php echo $_SESSION['Auth']['image']; ?>"></div>
					<a href="modifier_image.php">Modifier</a>
					</div>
					<h3><?php echo $_SESSION['Auth']['nom'] .' '. $_SESSION['Auth']['prenom']; ?></h3>
					<?php mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
		            mysql_select_db(DB_BDD);
		            mysql_query ('SET NAMES "UTF8"');
					$id_user = $_SESSION['Auth']['id'];
					$sql = "SELECT * FROM  membre WHERE id=$id_user";
		            $req2 = mysql_query($sql) or die('Erreur SQL !<br />' .$sql. '<br />' .mysql_error());
		            while ($data2 = mysql_fetch_assoc($req2)) {
		                $date_naissance = htmlentities($data2['date']);
						$adresse = htmlentities($data2['adresse']);
						$ville = htmlentities($data2['ville']);
						$codep = htmlentities($data2['codep']);
						$tel = htmlentities($data2['tel']);
		            } ?>
					
					 <ul id="liste_profil">
					 	<li><p class="liste_profil_li">Mail :<span class="champ_profil_user"><?php echo $_SESSION['Auth']['mail'] ?></span></p></li>
					 	<li><p class="liste_profil_li">Date de naissance :<span class="champ_profil_user"><?php echo $date_naissance; ?></p></li>
					 	<li><p class="liste_profil_li">Adresse :<span class="champ_profil_user"><?php echo $adresse ?></span></p></li>
					 	<li><p class="liste_profil_li">Ville :<span class="champ_profil_user"><?php echo $ville ?></span></p></li>
					 	<li><p class="liste_profil_li">Code postal :<span class="champ_profil_user"><?php echo $codep ?></span></p></li>
					 	<li><p class="liste_profil_li">Téléphone :<span class="champ_profil_user"><?php echo $tel ?></span></p></li>
					 </ul>    
					 <i><p style="color: red;"><?php if($_SESSION['Auth']['niveau']){echo 'Vous êtes administrateur !';}?></p></i>     
				</div>
	    </article>
	</section>
	<?php include("inclusion/bottom_inc.php");} ?>
Ca marche très bien si on n'est pas connecter on ne peut y accédez mais si on n'est connecté ca redirige aussi =/

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 17:05
par juliette
Est tu sur de $_SESSION['Auth']

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 19:23
par yosaku
J'enregistre mes sessions dans top_inc comme ça :
$_SESSION['Auth'] = array(
                    'mail' => $_POST['mail'],
                    'mdp' => $_POST['mdp'],
                    'id' =>  htmlentities($data['id']),
                    'nom' =>   htmlentities($data["nom"], ENT_QUOTES,"UTF-8"),
                    'prenom' =>  htmlentities($data["prenom"], ENT_QUOTES,"UTF-8"),
                    'niveau' =>  htmlentities($data['niveau']), 
                    'image' =>  htmlentities($data["image"], ENT_QUOTES,"UTF-8"),
		
                );     
J'ai même tester avec ['Auth]['mail'] aussi mais pas moyen d'accéder la page.

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 20:38
par juliette
As tu déclaré session_start() ?
Que donne un var_dump de $_SESSION ?

Re: Protéger une page utilisateurs

Posté : 23 nov. 2013, 23:08
par yosaku
Alors j'ai déclarer sessions start avant le if et ca marche très bien je ne peux pas accéder à la page si je ne suis pas connecter mais lorsque que je suis connecter j'ai l'erreur :
Notice: A session had already been started - ignoring session_start() in /home/alcudia/www/inclusion/top_inc.php on line 1
Car mes sessions sont déjà lancer dans le top_inc =(

Edit : J'ai tenter de mettre
if(!isset($_SESSION)){
    session_start();
}
Dans mon entête ca a l'air de marcher pour l'instant.

Merci pour votre aide en tout cas =)

Re: [RESOLU] Protéger une page utilisateurs

Posté : 24 nov. 2013, 14:14
par juliette
C'est donc a mon avis qu'il faut revenir sur ce que t'a dis Moogli, a savoir réorganiser le contenu de ce top_inc !