[Réglé] [resolu]Utilisation du systeme de session de PHPBB

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans cette section.

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com

[Réglé] [resolu]Utilisation du systeme de session de PHPBB

Messagepar Z e C a T » 04 Juil 2006 à 16:48

Bonjour à vous tous.
J'ai besoin de votre aide. J'espere poster à l'endroit appropprié, dans le cas contraire j'espere que le modéro ne me tapera pas trop fort sur les doigts.

Je vous expose mon probleme.
Je suis en train de créer un site utilisant la base de donnée d'un forum PHPBB, dans le but de s'identifier depuis la page d'accueil, de restreindre l'acces à certaines pages sans être connecté, et se déconnceter facilement.

Je suis presque arrivé au bout de mes peines, mais je me retrouve face à un petit probleme qui j'espere est facilement résolvable.
En effet, voyez vous j'ai dans chaque page un petit encadré affichant soit un formulaire d'identification, soit un message de bienvenue. Apres s'etre identifié, le formulaire disparait naturellement au bénéfice du message de bienvenue.
Jusque là, tout va bien.
Lorsque je clique sur "déconnection", je me déconnecte.
Mais l'ennui commence: si je fait retour arrière avec le navigateur, le contenu ne change pas en conséquence! e effet, je devrait faire face à un formulaire d'inscription, et non un message m'identifiant.

J'ai remarqué qu'en faisant F5, le contenu de la page se mettait comme il faut.

J'ajoute que le probleme marque dans le sens inverse: si je me logue et que je fait retour arrière, je fais face à nouveau au formulaire d'inscription, mais actualiser la page corrige cela


Comment faire pour que le contenu change automatiquement lors des retours en arrière? Et est ce possible, surtout.
Merci de m'aider.

J'imagine que vous voulez un peu de code source histoire de voir le probleme.


Fonction PHP affichant un formulaire ou un message de bienvenue selon la session:
Code: Tout sélectionner
if( $userdata['session_logged_in'] )
      { 
               $bullebleueprive= "bienvenue";
       }
else
       {
               $bullebleueprive=  <form>[...]</form>

       }
?>





Page dans laquelle s'ffiche le formmulaire ou le message
Code: Tout sélectionner
<?php
//auth
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);;

//*Session******************************************
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//*Fin session***************************************


//*INCLUDES ********************** 
include("include/contenubullebleueprive.php" ); //Fonction affichant soit le formulaire soit le message.
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
[...]
                <div id="identifie">
			<?php echo $bullebleueprive; ?>
		</div>
	</body>
</html>
Modifié en dernier par Z e C a T le 06 Juil 2006 à 16:17, modifié 3 fois.
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

re

Messagepar Elglobo » 04 Juil 2006 à 16:52

Salut,

Lorsque tu fais un retour arrière c'est normal de te retrouver dans la situation de connecté ou non connecté en fonction de l'état initial ou tu étais, comme tu le décris dans ton message.

Quel est le but d'empêcher ce retour arrière ?

@+ :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Messagepar Z e C a T » 04 Juil 2006 à 17:24

J'aimerais empecher l'ancien contenu de s'afficher dans le sens où le contenu de la page différera selon si l'on est connecté ou non. (un IF dans un DIV affichant un texte ou un autre texte.)
Si quelqun passe derriere celui qui s'est connecté, il pourra alors accéder à des données sensibles en faisant retour arrière.

Ca n'est aps une catastrophe, mais disons que s'il existe une solution simple, je suis preneur ;)

Je suppose que le fait de retrouver la page antérieure est due au cache du navigateur, la page n'étant pas générée par le serveur. Et j'imagine également qu'il nous est impossible d'implémenter un code sur le site afin d'obliger le navigateur à ne aps utiliser ce cache. Alors comment le forcer à vérifier? Par une requete?
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Messagepar Elglobo » 04 Juil 2006 à 17:38

Z e C a T a écrit:Si quelqun passe derriere celui qui s'est connecté, il pourra alors accéder à des données sensibles en faisant retour arrière.

Lorsque tu dis cela, ce n'est pas totalement vrai, car au premier clic vers son profil par exemple, il va te dire que tu n'es pas connecté, c'est un défaut de d'affichage par rapport au cache et tu ne peux rien y faire, et ce n'est franchement pas important de s'en occuper.
D'ailleurs cette impression ne pourrait arriver en plus que le même poste de travail, et qu'à partir du moment ou la fenêtre n'a pas été fermée, donc les chances sont plus que minimes.
Et même si de toute facon cela pouvait arriver il n'y aurait aucune conséquence en matière de sécurité.

Fais un test, ouvre ton forum phpBB, connecte toi, ensuite deconnecte toi, fais un retour arrière, tu vas te retrouver comme connecté, clique alors sur profil comme si tu voulais le modifier, et tu verras que tu auras la box de connexion qui s'affiche :wink:

La seule chose que tu pourras faire à la limite c'est au moment ou tu cliques sur déconnecter la fenêtre initiale se ferme et s'ouvre alors une nouvelle fenêtre mais ca ne sert franchement à rien.

@+ :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Messagepar Z e C a T » 04 Juil 2006 à 17:51

Tu as tout à fait raison, mais le fait de pouvoir afficher des données confidentielles sans à avoir à se loguer me trouble un peu, d'où la question de savoir s'il est possible d'empecher celà.

On va dire que ce probleme n'es pas trop grave ;)

Merci de m'avoir aidé, et longue vie à PHPbb.
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Messagepar Z e C a T » 06 Juil 2006 à 09:53

Coucou,je refais appel à vous ;)

J'ai remarqué quelque chose d'étrange:
En effet, si je me déconnecte et que je reviens à la partie publique du site, (que je me ballade un peu sur la partie publique pour la forme) et que je saisi en manuel l'adresse de la derniere page visitée en privé, le contenu s'affiche comme si j'etais loggué, alors que je suis déconnecté!!

Lorsque je saisi l'adresse avec mon ancien SID dans le champ d'addresse, cela reviens au meme, j'arrive à visualiser le contenu de la derniere page vue dans la partie privée.

Comment faire pour que le site vérifie à chaque affichage que je suis bel et bien connecté?
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Re

Messagepar Elglobo » 06 Juil 2006 à 09:58

Attention, il faut dans chaque page privée (c'est à dire qu'on ne peut consulter qu'à partir du moment on est connecté) reprendre les sessions de phpBB.
L'as tu fais ? Si oui ou non, montre une de tes pages qui doit être privée afin qu'on te montre comment procéder.
De plus, si la personne n'est pas connecté tu veux qu'elle soit redirigée, vers la page de login au cas ou elle fait appel à la page, ou vers l'index du site ?

@+ :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Re: Re

Messagepar Z e C a T » 06 Juil 2006 à 10:09

elglobo a écrit:Attention, il faut dans chaque page privée (c'est à dire qu'on ne peut consulter qu'à partir du moment on est connecté) reprendre les sessions de phpBB.
L'as tu fais ? Si oui ou non, montre une de tes pages qui doit être privée afin qu'on te montre comment procéder.

Je crois l'avoir fait.
Voici le code d'une de mes page privée:

Code: Tout sélectionner
<?php
//auth
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);;

//******************************************************
//*******************Session****************************
//******************************************************
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

//****************************************************************
//*********************** INCLUDES *******************************
//****************************************************************
include("include/contenubullebleueprive.php" ); //modifie le contenu de la bulle si identifié ou non.

//lien de déconnexion avec S_ID généré:
$u_login_logout = 'login.'.$phpEx.'?logout=true&amp;sid=' . $userdata['session_id'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	[...]
	</head>
<body bgcolor="#B6C4F0">
		<DIV id="page">
	 [...]
		<div id="contenu">
			<?php 
                          if( $userdata['session_logged_in'] ) //si l'utilisateur est logué
                         {?>
                          <!--ici le début du contenu quand on est logué -->
                          CONTENU quand logué
                          <!--ici la fin du contenu quand on est logué -->
                          <?php }
                          else{  // si l'utilisateur n'est pas logué
                          ?>
                          <!--ici le début du contenu quand on est PAS logué -->
                           Vous n'etes pas identifié par le site <BR> Merci de vous rendre à la <a href=index.php>page d'accueil</a> et de vous reconnecter.
                          <!--ici la fin du contenu quand on PAS est logué -->
                          <?php } ?><br>
			</div>
	 [...]
                                <div id="identifie">
			<?php echo $bullebleueprive; ?>
		</div>
            [...]
	</body>
</html>



elglobo a écrit:De plus, si la personne n'est pas connecté tu veux qu'elle soit redirigée, vers la page de login au cas ou elle fait appel à la page, ou vers l'index du site ?

En fait si l'utilisteur n'est pas loggué, je garde la structure de la page, et je change le contenu pour afficher un message du genre: merci de vous rendre sur la page d'accueil.
Mais une redirection avec message d'alerte en Javascript serait peut etre plus judicieux. Non?
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Re

Messagepar Elglobo » 06 Juil 2006 à 10:33

Salut Z e C a T,

Tu reprends bien les sessions phpBB dans ta page, mais tu n'indiques nul part le fait que si l'utilisateur est déconnecté alors je renvoie vers la page qu'il convient ?

Pour se faire, il faut rajouter aprés :
Code: Tout sélectionner
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata)

Un code de ce style :
Code: Tout sélectionner
//Page invisible aux invités
if (!$userdata['session_logged_in'])
{
      $header_location = ( @preg_match("/Microsoft|WebSTAR|Xitami/", getenv("SERVER_SOFTWARE")) ) ? "Refresh: 0; URL=" : "Location: ";
      header($header_location . append_sid("login.".$phpEx."?redirect=connectezvous.".$phpEx, true));
      exit;
}

En modifiant dans mon code, connectezvous.php par la page ou tu souhaites rediriger.

@+ :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Messagepar Z e C a T » 06 Juil 2006 à 11:01

J'essaie de suite! :D
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Messagepar Z e C a T » 06 Juil 2006 à 12:09

Bon visiblement cela ne fonctionne pas. J'avais en premier lieu des messages d'erreurs, puis apres plusieurs essais, il se trouve que je parviens tout de même à afficher la derniere page visitée dans la partie privée.

J'ai simplifié (a tord?) le code de la redirection, mais evidemment cela n'arrange pas le probleme.
Code: Tout sélectionner
if (!$userdata['session_logged_in'])
{ header(
"Location: index.php");
exit;
}


Toutefois, à nouveau,lorsque je saisi manuellement l'addresse de la partie privé, je peux afficher le contenu de la page. Si j'actualise la page cela provoque la redirection par le Header.

Sic.
Il semblerait que le navigateur garde en cache le contenu de la page juste avant que je clique sur "déconnexion"

Voici le code du formulaire pour la déconnexion:

Code: Tout sélectionner
<form id="loginmdp" action="forum/'.$u_login_logout.'" method="post">


La variable de $u_login_logout dans l'entete du FORM est:
Code: Tout sélectionner
$u_login_logout = 'login.'.$phpEx.'?logout=true&amp;sid=' . $userdata['session_id'];
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Re

Messagepar Elglobo » 06 Juil 2006 à 12:31

Si tu as rajouté le code dans chacun des pages privées, et que tu as accés en ayant appuyer sur deconnexion, alors c'est que tu n'est pas bien déconnecté.

Regarde ce sujet, tu as un script de connexion/deconnexion à dispo et qui marche sans soucis :
http://forums.phpbb-fr.com/viewtopic_62291.html

@+ :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Messagepar Z e C a T » 06 Juil 2006 à 16:16

Merci! Ca fonctionne.

J'ai modifié le code trouvé et je l'appelle dans une fonction.
Tu viens de m'aider à simplifier le code de mon site, merci! :D

Grossodomo, j'ai mis ce code:

Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
 
$redirect_login = "../actualites.$phpEx";
$redirect_logout = "../index.$phpEx";

// Start session management
$userdata = session_pagestart($user_ip, PAGE_SITE);
init_userprefs($userdata);
// End session management


$logout = htmlspecialchars($HTTP_GET_VARS['logout']);

if ( $logout )
{
   session_end($userdata['session_id'], $userdata['user_id']);
   redirect(append_sid($redirect_logout));
}

$logue = '<form id="loginmdp" action="?logout=true" method="post">
		<table width="190" border="0" cellspacing="0" cellpadding="0" align="center">
			<tr>
			<td valign="bottom">
				<div align="center">
					<font size="3" color="white" face="Arial"><b>Bienvenue </b></font></div>
			</td>
		        </tr>
			<tr height="19">
			<td height="19">
			<div align="center">
			<font size="3" color="white" face="Arial"><b>'.$userdata['username'].'</b></font></div>
			</td>
			</tr>
		        <tr height="7"><td height="7"></td></tr>
			<tr>
			<td >
			<div align="center">
			<font size="2" color="white" face="Arial"><b><a href="index.php" Class="lienbullebleue">Acc&eacute;der &agrave; la partie publique</a></b></font></div>
			</td>
			</tr>
			<tr height="7"><TD height="7">
			</td></tr>
			<tr height="26">
			<td valign="bottom" height="26">
			<div align="center"><input style="font-family: Arial;color:#FFFFFF;background-color:#003A9E;border:0px;font-size:14px;font-weight:bold" type="submit" value="Se d&eacute;connecter" name="login">
			</div>
			</td>
			</tr>
		</table>
	</form>';

$non_logue = '<div id="titreid">
				<div align="center">
				<font color="white" face="Arial"><b>Intranet</b></font></div>
				</div>
				<div id="loginmdpasse">D&eacute;connect&eacute;';

//traitement
if ( $userdata['session_logged_in'] )
{
   $bullebleue = $logue;
}
else
{
   $bullebleue = $non_logue;
}
?>


Ensuite je fait un Echo sur $Bullebleue, affichant soir $logue, soit $nonlogue.

Cela a clairement clarifié le code comparé au précédent.

De plus, il semble que ce code empeche enfin d'afficher la derniere page vue avant déconnexion.

Merci beaucoup!! ImagePS, j'en ai pas terminé avec mes questions ^^'
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Re

Messagepar Elglobo » 06 Juil 2006 à 16:31

Pas de soucis, Bonne fin de journée Z e C a T :wink:
phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Avatar de l’utilisateur
Elglobo
Floodeur universel
Floodeur universel
 
Messages: 14943
Enregistré le: 13 Oct 2004 à 17:28

Messagepar Z e C a T » 06 Juil 2006 à 16:38

Arf, j'ai oublié d'ajouter quelque chose (ah, on fait pas les choses à moitié.)

A la fin du script, j'ai ajouté ces lignes de codes que tu m'avais fournies et que j'ai modifiées.
Code: Tout sélectionner
//script redirigeant si inauthentifié
if (!$userdata['session_logged_in'])
{ header("Location: index.php");
exit;}


Ainsi, saisir une page dans le champ d'adresse sans s'authentifier a pour effet de ramener immédiatement à l'index. Usefull ;)
Avatar de l’utilisateur
Z e C a T
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 04 Juil 2006 à 16:20

Suivante

Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités