par
coxine » 16 mars 2006, 11:20
Me revoilou...enfin...je suis perplexe sur mon truc en fait.
Les tests s'effectuent bien. Mais y a qqchose qui me dérange et j'aimerais savoir d'où ça vient.
Je m'explique : la première fois que l'on s'identifie, si login correct mais mot de passe incorrect, on a bien l'affichage de l'erreur : "utilisateur inconnu".
Ensuite, si je m'identifie avec le bon login et le bon mot de passe, j'ai mon message d'accueil "bienvenue trucmuche" qui s'affiche.
Jusque là tout va bien....
Mais si je me déconnecte.
Et que je retente une identification, je me suis aperçue que je peux mettre n'importe quel mot de passe

avec mon login et l'on me dit : Bienvenue trucmuche".
Y a un big blème je pense.
Ca veut dire que lorsque je clique sur déconnecter, les variables de sessions ne sont pas vidées ? Car j'avais gardé sur ma page index "session_start();.
Je remets le code de mes pages :
index.php
<?php require_once('includes/xxxxx.php'); ?>
<?php session_start();?>
.../...
<?php
// tester la présence de la variable 'login' dans la session
if (isset($_SESSION['login']) && !empty($_SESSION['login'])) {
echo 'Bienvenue ' . $_SESSION['prenom'] .' '. $_SESSION['nom'];
// lecture de la variable de session 'login'
echo '<br /><br />';
echo '>> <a href="moncompte.php">Mon compte</a><br /><br />';
echo '>> <a href="includes/deconnect.php">Déconnexion</a>';
} else {
?>
.../...
//Le formulaire
<form action="includes/valid.php" method="post" name="form" id="form" onSubmit="showsubmit(this)">
<input type="hidden" name="redir" value="index.php">
<div class="hidden" id="login">
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td width="116" height="19" valign="top" class="Style4">
<div align="right">Login</div>
</td>
<td width="77" valign="top">
<input name="login" type="text" class="form" id="login" size="15">
</td>
</tr>
<tr>
<td height="19" valign="top" class="Style4">
<div align="right">Mot de<br/> passe</div>
</td>
<td valign="top">
<input name="pass2" type="password" class="form" id="pass2" value="" size="15">
</td>
</tr>
<tr>
<td height="13" colspan="2" valign="top">
<div align="right"><a href="#" onClick="javascript:showsubmit(document.form);">Me connecter</a></div>
</td>
</tr>
</table></div>
</form>
//affichage du message d'erreur
<?php
if(isSet($_GET['erreur'])) {
echo "<p align=right>Utilisateur inconnu,<br /> veuillez recommencer SVP</p><br>";
}
?>
La page valid.php
<?php
session_start();
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="xxxxx";
if (isset($_POST['login']) && !empty($_POST['login'])) { // premier test à faire, est-ce qu'un login est passé ? si non, pas la peine de faire d'autre controle, on passe direct à la fin
$login=$_POST['login']; // on stocke dans $login pour simplifier l'écritude et la lisibilité
mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_selectdb($dbname);
$result=mysql_query("SELECT id, nom, prenom, FROM membres WHERE login = '".mysql_real_escape_string($login)."' "); // je n'arrive pas avec le test sur le mot de passe y a tjs une erreur :-(
if ($row=mysql_fetch_array($result)) { // s'il y a un résultat, c'est que le login (ou le couple login/pass) existe en base. L'utilisateur s'est donc correctement authentifié
$_SESSION['login'] = $login; // je mets ses infos en session
$_SESSION['nom'] = $row['nom'];
$_SESSION['prenom'] = $row['prenom'];
header('Location: ../index.php'); // et on le redirige directement vers la page sur laquelle il a le droit d'aller
exit(); // bon maintenant qu'il est parti, pas la peine d'aller plus loin
}
}
// si l'authentification n'a pas fonctionné (soit pace que $_POST['login'] est vide, soit parce qu'il n'y a pas eu de résultat en base) on arrive ici et on redirige l'utilisateur sur la page d'index avec la variable erreur égale à 1 pour faire afficher le message d'erreur
header("Location:../index.php?erreur=1");
?>
et
deconnect.php :
<?php
session_start();
session_destroy();
header('location:../index.php');
?>
Voilà, je crois que je vais tout remettre à plat. Où est-ce que ça cloche ? Je pense que je n'ai pas fait de vérif associée au mot de passe, c'est ça ?
Merci de votre aide !!!

Me revoilou...enfin...je suis perplexe sur mon truc en fait.
Les tests s'effectuent bien. Mais y a qqchose qui me dérange et j'aimerais savoir d'où ça vient.
Je m'explique : la première fois que l'on s'identifie, si login correct mais mot de passe incorrect, on a bien l'affichage de l'erreur : "utilisateur inconnu".
Ensuite, si je m'identifie avec le bon login et le bon mot de passe, j'ai mon message d'accueil "bienvenue trucmuche" qui s'affiche.
Jusque là tout va bien....
Mais si je me déconnecte.
Et que je retente une identification, je me suis aperçue que je peux mettre n'importe quel mot de passe :shock: avec mon login et l'on me dit : Bienvenue trucmuche".
Y a un big blème je pense.
Ca veut dire que lorsque je clique sur déconnecter, les variables de sessions ne sont pas vidées ? Car j'avais gardé sur ma page index "session_start();.
Je remets le code de mes pages :
[b]index.php[/b]
[php]<?php require_once('includes/xxxxx.php'); ?>
<?php session_start();?>
.../...
<?php
// tester la présence de la variable 'login' dans la session
if (isset($_SESSION['login']) && !empty($_SESSION['login'])) {
echo 'Bienvenue ' . $_SESSION['prenom'] .' '. $_SESSION['nom'];
// lecture de la variable de session 'login'
echo '<br /><br />';
echo '>> <a href="moncompte.php">Mon compte</a><br /><br />';
echo '>> <a href="includes/deconnect.php">Déconnexion</a>';
} else {
?>
.../...
//Le formulaire
<form action="includes/valid.php" method="post" name="form" id="form" onSubmit="showsubmit(this)">
<input type="hidden" name="redir" value="index.php">
<div class="hidden" id="login">
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td width="116" height="19" valign="top" class="Style4">
<div align="right">Login</div>
</td>
<td width="77" valign="top">
<input name="login" type="text" class="form" id="login" size="15">
</td>
</tr>
<tr>
<td height="19" valign="top" class="Style4">
<div align="right">Mot de<br/> passe</div>
</td>
<td valign="top">
<input name="pass2" type="password" class="form" id="pass2" value="" size="15">
</td>
</tr>
<tr>
<td height="13" colspan="2" valign="top">
<div align="right"><a href="#" onClick="javascript:showsubmit(document.form);">Me connecter</a></div>
</td>
</tr>
</table></div>
</form>
//affichage du message d'erreur
<?php
if(isSet($_GET['erreur'])) {
echo "<p align=right>Utilisateur inconnu,<br /> veuillez recommencer SVP</p><br>";
}
?> [/php]
[b]La page valid.php[/b]
[php]<?php
session_start();
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="xxxxx";
if (isset($_POST['login']) && !empty($_POST['login'])) { // premier test à faire, est-ce qu'un login est passé ? si non, pas la peine de faire d'autre controle, on passe direct à la fin
$login=$_POST['login']; // on stocke dans $login pour simplifier l'écritude et la lisibilité
mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_selectdb($dbname);
$result=mysql_query("SELECT id, nom, prenom, FROM membres WHERE login = '".mysql_real_escape_string($login)."' "); // je n'arrive pas avec le test sur le mot de passe y a tjs une erreur :-(
if ($row=mysql_fetch_array($result)) { // s'il y a un résultat, c'est que le login (ou le couple login/pass) existe en base. L'utilisateur s'est donc correctement authentifié
$_SESSION['login'] = $login; // je mets ses infos en session
$_SESSION['nom'] = $row['nom'];
$_SESSION['prenom'] = $row['prenom'];
header('Location: ../index.php'); // et on le redirige directement vers la page sur laquelle il a le droit d'aller
exit(); // bon maintenant qu'il est parti, pas la peine d'aller plus loin
}
}
// si l'authentification n'a pas fonctionné (soit pace que $_POST['login'] est vide, soit parce qu'il n'y a pas eu de résultat en base) on arrive ici et on redirige l'utilisateur sur la page d'index avec la variable erreur égale à 1 pour faire afficher le message d'erreur
header("Location:../index.php?erreur=1");
?> [/php]
et [b]deconnect.php[/b] :
[php]<?php
session_start();
session_destroy();
header('location:../index.php');
?>[/php]
Voilà, je crois que je vais tout remettre à plat. Où est-ce que ça cloche ? Je pense que je n'ai pas fait de vérif associée au mot de passe, c'est ça ?
Merci de votre aide !!! :-)