Probleme de session PHP

Fermé
vito - 26 oct. 2006 à 12:01
 Skype - 16 juin 2008 à 22:21
Bonjour à tous et d'avance merci.

Je développe un site en php, avec des sessions utilisateur, pour gérer leur compte.

Voilà mon souci :

L'utilisateur A se logge à partir de son poste (section "se connecter").
Il arrive donc sur son compte "zone membre" (tout va bien jusque là).

L'utilisateur B se logge sur n'importe quel poste à partir de la section 'se connecter'.
OU
L'utilisateur B tente d'accéder directement à la "zone membre"
Alors il se retrouve dans chez l'utilisateur A.

Donc en gros si A se logge, pendant X temps, tout le monde qui tente de se connecter sur retrouve loggé en tant que A.

Merci pour votre coup de main.
Voici le source :

Formulaire d'identification (simplifié) :
<form name="form1" method="POST" action="/index.php?id=78" enctype="multipart/form-data">
  <table width="100%"  border="0">
    <tr>
      <td><font size=2>Identifiant (email) </font></td>
      <td><input name="login" type="text" id="login"></td>
    </tr>
    <tr>
      <td><font size=2>Mot de passe</font> </td>
      <td><input name="password" type="password" id="password"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Submit" type="submit" value="Identification"></td>
    </tr>
  </table>
</form>


Etape de traitement du formulaire :

require_once('config/config.inc.php');
session_start();

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($accesscheck)) {
  $GLOBALS['PrevUrl'] = $accesscheck;
  session_register('PrevUrl');
}

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) ) {
  $loginUsername=$_POST['login'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "niveau";
  $MM_redirectLoginSuccess = "/index.php?id=48";
  //$MM_redirectLoginSuccess = "login2.php";
  $MM_redirectLoginFailed = "/index.php?id=46";
  $MM_redirecttoReferrer = false;
mysql_select_db("$dbbase",$db) OR DIE("Base de données inaccessible.");
  	
  $LoginRS__query=sprintf("SELECT idmembre, email, motdepasse, niveau FROM membres WHERE email='%s' AND motdepasse='%s'",
  get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); 
   
  $LoginRS = mysql_query($LoginRS__query, $db) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
    $loginStrGroup  = mysql_result($LoginRS,0,'niveau');
	$_SESSION["MM_Username"] = $loginUsername;
    $_SESSION["MM_Niveau"] = $loginStrGroup;
	$_SESSION["MM_idmembre"] = mysql_result($LoginRS,0,'idmembre');
    echo "mm_idmmebre : " .$_SESSION["MM_idmembre"];
    
	if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
    }
    header("Location: " . $MM_redirectLoginSuccess );
	exit;
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
	exit;
  }
}


Si tout est ok, il est redirigé vers la page de visualisation de son compte :
//Compte client
  require_once('config/config.inc.php');
  session_start();
  if ( ! isset($_SESSION["MM_idmembre"])) {
  $insertGoTo = "index.php?id=46";
  header(sprintf("Location: %s", $insertGoTo));
  exit;
  }
echo $_SESSION["MM_idmembre"];
  ?>
  <SCRIPT LANGUAGE="JavaScript">

<!-- Script
function Ouvrir(page) {
if (window.fenetre_demande) fenetre_demande.close();
fenetre_demande = this.open(page, "_blank", "toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no,width=500,height=300");
}

// Fin -->
  </SCRIPT>

  <SCRIPT LANGUAGE=JAVASCRIPT>
function verify(){
    msg = "Détruire cette annonce ?";
    return confirm(msg);
    }
  </SCRIPT>
    <SCRIPT LANGUAGE=JAVASCRIPT>
function deconnect(){
    msg = "Souhaitez-vous vraiment vous déconnecter ?";
    return confirm(msg);
    }
  </SCRIPT>
  <?
$var1_idmembre = "0";
if (isset($_SESSION["MM_idmembre"])) {
  $var1_idmembre = (get_magic_quotes_gpc()) ? $_SESSION["MM_idmembre"] : addslashes($_SESSION["MM_idmembre"]);
  echo "var idmembre" . $var1_idmembre;
}
$db = mysql_connect("$dbhost", "$dblogin", "$dbpass") OR DIE("Base de données inaccessible.");
mysql_select_db("$dbbase",$db) OR DIE("Base de données inaccessible.");

$query_offres_emploi = sprintf("SELECT * FROM offres_emploi WHERE idmembre=%s", $var1_idmembre);
$offres_emploi = mysql_query($query_offres_emploi, $db) or die(mysql_error());
$row_offres_emploi = mysql_fetch_assoc($offres_emploi);
$totalRows_offres_emploi = mysql_num_rows($offres_emploi);

$query_membres = sprintf("SELECT * FROM membres WHERE idmembre=%s", $var1_idmembre);
$membres = mysql_query($query_membres, $db) or die(mysql_error());
$row_membres = mysql_fetch_assoc($membres);
$totalRows_membres = mysql_num_rows($membres);
?>
  </p>
  <font size="2">Bienvenue <? echo $row_membres['email']; ?> dans votre espace personnel,<br>
  Vous pouvez dès à présent déposer et consulter des annonces.</font></p>
<p><font size="2"><br>
</font></p>

<font size="2">
      <? if (strlen($row_membres['profil'])==1){ ?>
<p><strong><a href="[~68~]">Acc&eacute;der &agrave; la rubrique : espace recruteurs</a></strong></p>
      <?}?>
	  <? if (strlen($row_membres['profil'])==0){ ?>
<p><strong><a href="[~44~]">Acc&eacute;der &agrave; la rubrique : espace candidats </a></strong></p>
      <?}?>

</font><p>
  <font size="2">Récapitulatif de vos annonces en cours : </font>
  
  <!--Recapitulatif des annonces emploi en cours-->

<? if (strlen($row_membres['profil'])==1){ ?>
<table width="95%"  border="0">
  <tr bgcolor="#04C026">
    <font size="1"><td width="54%"><div align="center">Offres d'emploi</div></td>
    <td width="46%"><div align="center">Actions</div></td></font>
  </tr>
  <?php do { ?>
  <?php if ($totalRows_offres_emploi > 0) { // Show if recordset not empty ?>
  <tr>
    <td><div align="center"><font size="1">Ref: <?php echo $row_offres_emploi['id']; ?> - <?php echo $row_offres_emploi['titre']; ?></font></div></td>
    <td class="style1"><div align="center"><font size="1">
	Modifier - 
	<a href="[~76~]&id=<?php echo $row_offres_emploi['id']; ?>" Onclick="return verify()">Supprimer</a> - 
	<a href="javascript:Ouvrir('/details_offre.php?offre_id=<?php echo $row_offres_emploi['id']; ?>')">Visualiser</a> - 
	Paiement </font></div></td>
  </tr>
  <?php } // Show if recordset not empty ?>
  <?php } while ($row_offres_emploi = mysql_fetch_assoc($offres_emploi)); ?>
  <?php if ($totalRows_offres_emploi == 0) { // Show if recordset empty ?>
  <tr>
    <td><font size="2">Aucune annonce en cours </font></td>
    <td>&nbsp;</td>
  </tr>
  <?php } // Show if recordset empty ?>
</table>
      <?}?>

<?
$var1_liste_stages = "0";
if (isset($_SESSION["MM_idmembre"])) {
  $var1_liste_stages = (get_magic_quotes_gpc()) ? $_SESSION["MM_idmembre"] : addslashes($_SESSION["MM_idmembre"]);
}
$db = mysql_connect("$dbhost", "$dblogin", "$dbpass") OR DIE("Base de données inaccessible.");
mysql_select_db("$dbbase",$db) OR DIE("Base de données inaccessible.");
$query_liste_stages = sprintf("SELECT * FROM liste_stages WHERE liste_stages.idmembre=%s", $var1_liste_stages);
$liste_stages = mysql_query($query_liste_stages, $db) or die(mysql_error());
$row_liste_stages = mysql_fetch_assoc($liste_stages);
$totalRows_liste_stages = mysql_num_rows($liste_stages);
?>

<p>
<!--Recapitulatif des annonces stage en cours-->
<? if (strlen($row_membres['profil'])==1){ ?>
<table width="95%"  border="0">
  <tr bgcolor="#04C026">
    <font size="1"><td width="54%"><div align="center">Offres de stage </div></td></font>
    <font size="1"><td width="46%"><div align="center">Actions</div></td></font>
  </tr>
  <?php do { ?>
  <?php if ($totalRows_liste_stages > 0) { // Show if recordset not empty ?>
  <tr>
    <td><div align="center"><font size="1">Ref: <?php echo $row_liste_stages['id']; ?> - <?php echo $row_liste_stages['titre']; ?></font></div></td>
    <td class="style1"><div align="center"><font size="1">Modifier - <a href="[~76~]&idannonce=<?php echo $row_liste_stages['id']; ?>" Onclick="return verify()">Supprimer</a> - <a href="javascript:Ouvrir('/details_stage.php?demande_id=<?php echo $row_liste_stages['id']; ?>')">Visualiser</a> - Paiement </font></div></td>
  </tr>
  <?php } // Show if recordset not empty ?>
  <?php } while ($row_liste_stages = mysql_fetch_assoc($liste_stages)); ?>
  <?php if ($totalRows_liste_stages == 0) { // Show if recordset empty ?>
  <tr>
    <td><font size="2">Aucune annonce en cours </font></td>
    <td>&nbsp;</td>
  </tr>
  <?php } // Show if recordset empty ?>
</table>
      <?}?>



<!--Liste des annonces de demandes d'emploi-->
<?
$var1_demandes_emploi = "0";
if (isset($_SESSION["MM_idmembre"])) {
  $var1_demandes_emploi = (get_magic_quotes_gpc()) ? $_SESSION["MM_idmembre"] : addslashes($_SESSION["MM_idmembre"]);
}
$db = mysql_connect("$dbhost", "$dblogin", "$dbpass") OR DIE("Base de données inaccessible.");
mysql_select_db("$dbbase",$db) OR DIE("Base de données inaccessible.");
$query_demandes_emploi = sprintf("SELECT * FROM demandes_emploi WHERE demandes_emploi.idmembre=%s", $var1_demandes_emploi);
$demandes_emploi = mysql_query($query_demandes_emploi, $db) or die(mysql_error());
$row_demandes_emploi = mysql_fetch_assoc($demandes_emploi);
$totalRows_demandes_emploi = mysql_num_rows($demandes_emploi);
?>

<p>

<!--Recapitulatif des annonces stage en cours-->
<? if (strlen($row_membres['profil'])==0){ ?>
<table width="95%"  border="0">
  <tr bgcolor="#04C026">
    <font size="1"><td width="54%"><div align="center">Liste des annonces de demandes d'emploi effectuées </div></td></font>
    <font size="1"><td width="46%"><div align="center">Actions</div></td></font>
  </tr>
  <?php do { ?>
  <?php if ($totalRows_demandes_emploi > 0) { // Show if recordset not empty ?>
  <tr>
    <td><div align="center"><font size="1">Ref: <?php echo $row_demandes_emploi['id']; ?> - <?php echo $row_demandes_emploi['titre']; ?></font></div></td>
    <td class="style1"><div align="center"><font size="1">Modifier - <a href="[~76~]&idannonce=<?php echo $row_demandes_emploi['id']; ?>" Onclick="return verify()">Supprimer</a> - <a href="javascript:Ouvrir('/details_demande.php?demande_id=<?php echo $row_demandes_emploi['id']; ?>')">Visualiser</a> - Paiement</font></div></td>
  </tr>
  <?php } // Show if recordset not empty ?>
  <?php } while ($row_demandes_emploi = mysql_fetch_assoc($demandes_emploi)); ?>
  <?php if ($totalRows_demandes_emploi == 0) { // Show if recordset empty ?>
  <tr>
    <td><font size="2">Aucune annonce en cours </font></td>
    <td>&nbsp;</td>
  </tr>
  <?php } // Show if recordset empty ?>
</table>
      <?}?>
<br>

<a href="/index.php?id=79" Onclick="return deconnect()">Se déconnecter</a>
<?php
mysql_free_result($offres_emploi);
mysql_free_result($liste_stages);
mysql_free_result($demandes_emploi);

1 réponse

tu peut essayer de créer des session bien compliquée, ou cryptée, différente pour chaque user.

comme cela, le user B ne connaitra pas le session du user A, à mon d'aller sur son poste ou de réussir à récupérer le cookie session. (si tu fait un cookie session.)
0