Bonjour,
Voila je rencontre un petit problème avec mon code.
Membre qui essaie de se connecter alors qu'il l'est déjà
<?php
session_start();
if(isset($_SESSION['connecte']))
{
if($_SESSION['connecte']==1)
header('location:index.php');
}
include("include/gestion_erreur.php");
include("include/connexionBD.php");
$message="";
if(isset($_POST['ENTRER']))
{
if (isset($_POST['user']) && isset($_POST['mdp']))
{
$user=htmlspecialchars($_POST['user']);
$mdp=htmlspecialchars($_POST['mdp']);
$req = $bdd->prepare('SELECT * FROM users WHERE login = :user ');
$req->execute(array('user'=>$user));
$resultat = $req->fetch();
if($resultat['login']==$user)
{
$mdp=md5($_POST['mdp']);
if($resultat['motdepasse']==$_POST['mdp'])
{
$_SESSION['user'] = $_POST['user'];
$_SESSION['id'] = $resultat['id_users'];
$_SESSION['grade'] = $resultat['grade'];
$_SESSION['connecte'] = 1;
header('Location: accueil.php');
}
else $message="mot de passe incorrect !!!";
} else $message="Login incorrect !!!";
} else $message="Login ou mot de passe manquant !!!";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
Author: Reality Software
Website: http://www.realitysoftware.ca
Note: This is a free template released under the Creative Commons Attribution 3.0 license,
which means you can use it in any way you want provided you keep the link to the author intact.
-->
<!--[if lt IE 7 ]> <html lang="en" class="ie6 ielt8"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="ie7 ielt8"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="ie8"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>Authentification</title>
<link rel="stylesheet" type="text/css" href="css/stylelogin.css" />
</head>
<body>
<div class="container">
<section id="content">
<form action="" method="post">
<h1>ALLANDIK</h1>
<div>
<input type="text" placeholder="Username" required="" name="user" />
</div>
<div>
<input type="password" placeholder="Password" required="" name="mdp" />
</div>
<div>
<input type="submit" name="ENTRER" />
</div>
</form>
</section>
</div>
<?php echo "<center><font color='red' text-align='center' >$message</font></center>";?>
</body>
</html>
J'aimerais effectuer un test avant qu'un utilisateur ne se logue sur un site. Je teste si un login est connecté, alors que son utilisateur essaie encore de se connecter avec le meme login et le mot de passe, on le redirige sur la page 'index.php' de connexion.
J' ai beau effectué plusieurs test mais sans succès. Alors j'ai besoin de vos aides.
Merci encore et bon soirée.
Je peux me connecter avec un login plusieurs fois meme s il n est pas deconnecter(j ai essaie avec 2 navigateurs)
Bonsoir,
Je ne comprend pas le souci, si tu passes par des sessions pour gérer tes connexions, c'est normal que tu puisses te connecter avec 2 navigateurs différents, les sessions sont indépendantes...
A moins que j'ai mal compris le problème ?
Salut,
pour le début du code change ça :
if(isset($_SESSION['connecte']))
{
if($_SESSION['connecte']==1)
header('location:index.php');
}
par ça :
if(!isset($_SESSION['connecte']))
{
header('location:login.php');
}
Le code ci-dessus tu le met pour toutes tes pages sauf pour la page de login/connexion tu met ça :
if(isset($_SESSION['connecte']) && $_SESSION['connecte'] == 1)
{
header('location:index.php');
}
Regarde si ça arrange ton problème...
@CenT
Il vaut mieux avoir ce genre de code dans une fonction, que tu utilises ensuite partout où tu en as besoin.
Et il manque le cas : set, mais à 0.
public function isLogged()
{
if(!isset($_SESSION['connecte']) ||
(isset($_SESSION['connecte'] && $_SESSION['connecte'] == 0))
{
return false;
}
return true;
}
Mais ça ne règle PAS le problème qu'a soulevé Khalysto !
J'imagine que pour y remédier, il ne faut PAS passer par les $_SESSION pour vérifier si un utilisateur est connecté, mais par la base de données.
Il faudrait rajouter un champ "logged" à la table "users",
et au moment de l'authentification d'un utilisateur, on modifie ce champ à 'logged', ou true, ou 1.
et à la déconnexion 'unlogged', ou false, ou 0.
Et quand tu vérifies si un utilisateur est authentifié ou non, tu regardes ce champ.
Ça alourdi un peu les performances puisque c'est plus rapide de faire une vérification sur une variable $_SESSION, plutôt que de faire des appels à la base de données.
Alors la question que je me pose c'est :
Est-ce que c'est utile ? C'est à dire :
Est-ce qu'il y a une faille de sécurité à ce qu'un utilisateur puisse s'authentifier en même temps sur plusieurs navigateurs ?
À y réfléchir vite fait comme ça, je dirai NON, mais je suis peut-être passé à coté d'un cas tordu et dangereux.
je suis d'accord avec toi, sauf que je ne comprend pas pourquoi vous parler de plusieurs navigateurs en même temps, il à juste essayer avec 2 navigateurs différents pour son problème.
Pour en revenir moi aussi j'utilise des fonctions à ce niveau, son code n'a pas de fonction, je m'adapte au code qu'il nous montre, c'est du dépannage, après il as de l'optimisation/amélioration à faire dans son code si il souhaite l'évoluer.
Pour en revenir moi aussi j'utilise des fonctions à ce niveau, son code n'a pas de fonction, je m'adapte au code qu'il nous montre, c'est du dépannage, après il as de l'optimisation/amélioration à faire dans son code si il souhaite l'évoluer.
Oui c'est vrai, je comprend. Désolé.
je ne comprend pas pourquoi vous parler de plusieurs navigateurs en même temps, il à juste essayer avec 2 navigateurs différents pour son problème.
C'est suffisant 2.
L'idée c'est juste qu'il voudrait éviter que :
C'est quelque chose à laquelle je n'avais jamais pensé xD
Instinctivement j'aurai tendance à dire que ce n'est pas grâve en fin de compte... Qu'on peut laisser ces multiples SESSIONS.
Parce que, ceux qui vont essayer des trucs tordus comme ça, ne sont pas les utilisateurs, mais les hackers. Et ces Hackers ne pourront rien tirer (je crois...) de ce genre de "ruse".
Mais j'aimerai bien avoir des avis solides sur le sujet.
pour le code de CenT, ca ne marche pas 'La page n’est pas redirigée correctement...' boucle infini. Mais j'éssaierai avec 2 variables dans ma table users (logged et unlogged); Je vous tiendrais au courant et merci encore. Bonne journée.
Salut,
Pour la boucle infinie, surtout éviter les espaces en début de code pour une ouverture de session.
Bonjour,
avec la table user sa marche bien merci CenT. Mais j ai encore un problème. Si l'utilisateur clique sur deconnecter, y a pas de souci la variable est mise à 0, mais si l utilisateur ferme son navigateur, à la prochaine connexion il peut pas se connecter car la variable n'a pas été updater.
Merci.
deconnexxion.php
" <?php session_start();
include("include/gestion_erreur.php");
include("include/connexionBD.php");
$user=$_SESSION['user'];
$mdp=$_SESSION['mdp'];
$connecte=0;
$reqP=$bdd->prepare("UPDATE users SET connecte=:connecte WHERE login = :user");
$reqP->bindParam(":connecte",$connecte);
$reqP->bindParam(":user",$user);
$reqP->execute();
session_destroy();
$_SESSION=array();
header('Location: index.php');
?>"
Donc si je comprend bien, c'est la partie update du champ connecte qui ne se met pas à jour ?
Si oui ta pas des erreurs qui remonte php, du serveur web apache par exemple ?
Pour faire des tests du désactive ton header de redirection, tu met des echo des variables de $user et $connecte pour être sur qu'il retourne bien la bonne valeur, et pour finir voir ce que l’exécution de la requete donne si il y a des erreurs ou pas qui remonte sur le serveur web.
Ton champs "connecte" il est de quel type string or integer ?
Si il est bien en integer, modifie ton bind param de connecte comme ça :
$reqP->bindParam(":connecte",$connecte,PDO::PARAM_INT);
Tout le problème pour gérer une variable connecté/deconnecté c'est qu'on a pas d'évènement qui marque la déconnexion
c'est pas simple, c'est pour ça qu'en général on s'en fiche