par
Perdu » 09 juin 2006, 14:48
Bonjour à tous,
J'aurais besoin d'un conseil pour un problème que je n'arrive pas à résoudre.
Sur 2 pages d'un site, une identification est nécessaire pour accéder à ces 2 pages.
Un formulaire de connexion est inclus si un $_SESSION['pseudo'] n'existe pas.
Le problème est que certains utilisateurs sont contraints de redemander un mot de passe car ils n'arrivent pas à se connecter et ce à chaque déconnexion, le lendemain, ou après fermeture du navigateur, c'est assez vague à déterminer.
Je n'arrive pas à reproduire le problème chez moi, je ne comprends pas.
Voici la page qui requiert une identification :
session_start();
// identifiants pour la base de données
@ $idbdd = require('./connect.php');
// inclusion de la bibilothèque des fonctions
@ $biblio = require('./biblio.php');
if(!$biblio || !$idbdd)
{
exit();
}
if( !isset($_SESSION['pseudo']) )
{
require('./inc/connexion.php');
}
else
{
.........
La page connexion.php
// mot de passe oublié inclusion du formulaire
if( isset($_GET['act']) && $_GET['act'] == 1 )
{
require('./inc/new_mdp.inc.php');
exit();
}
// connexion
if( isset($_POST['envoi']) && $_POST['envoi'] == 'Connexion' )
{
unset($mess_connect);
// connexion de l'utilisateur
$verif = "SELECT COUNT(pseudo) FROM participant WHERE pseudo='" . protection(trim($_POST['pseudo'])) . "';";
@ $req = mysql_query($verif);
if( mysql_result( $req, 0) == 1 )
{
$verif = "SELECT id, mdp FROM participant WHERE pseudo='" . protection(trim($_POST['pseudo'])) . "';";
@ $req = mysql_query($verif);
if( md5(trim($_POST['passwd'])) == mysql_result($req, 0, 'mdp') )
{
$_SESSION['pseudo'] = protection($_POST['pseudo']);
$_SESSION['id'] = mysql_result($req, 0, 'id');
header('location: ' . $_SERVER['HTTP_REFERER']);
}
else
{
$mess_connect = 'Vos identifiants sont incorrects';
}
}
else
{
$mess_connect = 'Vos identifiants sont incorrects';
}
}
?>
Elle fait appel à une autre en cas de mdp oublié ou perdu.
// mot de passe oublié
if( isset($_POST['new_mdp']) && $_POST['new_mdp'] == 'Valider' && !empty($_POST['pseudo']) && !empty($_POST['mail']) )
{
unset($confirm);
// vérification du pseudo et mail
$sql = "SELECT COUNT(pseudo) FROM participant WHERE pseudo='" . protection($_POST['pseudo']) . "'";
@ $req = mysql_query($sql);
if( mysql_result($req, 0) == 1 )
{
$sql = "SELECT mail FROM participant WHERE pseudo='" . protection($_POST['pseudo']) . "'";
@ $mail = mysql_result(mysql_query($sql), 0);
if ( $mail )
{
// le pseudo correspond à l'email, envoi d'un nouveau mdp
// génération d'un nouveau mot de passe
$string = 'azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789';
$mdp = chaine_aleatoire($string, 8);
$from = "From: ";
$from .= "MIME-version: 1.0\n";
$from .= "Content-type: text/html; charset= iso-8859-1\n";
$sujet = "Envoi d'un nouveau mot de passe\n";
$message = ''; // message de l'email
// entete mail à changer
@ $envoi_mail = mail($mail, $sujet, $message, $from);
if(!$envoi_mail)
{
echo '<p>erreur.</p>';
exit();
}
else
{
// si l'email a bien été envoyé, mise à jour de la table particpant.
@ $update = mysql_query("UPDATE participant SET mdp='" . md5($mdp) . "' WHERE pseudo='" . protection($_POST['pseudo']) . "';");
if ( !$update )
{
$mes_mdp = 'erreur';
}
else
{
// tout est ok.
header('location: ' . $_SERVER['REQUEST_URI'] . '&confirm=1');
}
}
}
else
{
exit('erreur');
}
}
else
{
$mes_mdp = 'Ces identifiants ne sont pas corrects';
}
}
else
{
// affichage de la page
Je pense à un problème avec la session ou la requête, mais pourquoi cela fonctionne avec pratiquement tout le monde, et que seulement 3, 4 utilisateurs ont ce problème.
J'ai vraiment besoin de vos conseils, car le problème est tenace et je suis à court d'idées
Merci.