Authentifier une session correctement
Fermé
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
-
24 nov. 2021 à 14:52
jordane45 Messages postés 38321 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 décembre 2024 - 25 nov. 2021 à 19:26
jordane45 Messages postés 38321 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 décembre 2024 - 25 nov. 2021 à 19:26
A voir également:
- Authentifier une session correctement
- Un cable reseau n'est pas branché correctement ou est endommagé ✓ - Forum Windows 7
- Estelle vient de verrouiller sa session d'ordinateur. que peut-on dire ? - Forum Windows
- Ants session déconnectée - Forum Services en ligne
- Facebook session expirée ✓ - Forum Facebook
- Authentifier un ticket transcash ✓ - Forum Consommation & Internet
4 réponses
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
4 707
24 nov. 2021 à 15:12
24 nov. 2021 à 15:12
Bonjour
As-tu bien un session start sur chacune de tes pages ?
Comment vas-tu de la page 1 à la page 2 ?
À quel moment appels tu les diverses fonctions que tu nous montres ?
Pourquoi as-tu deux fois une fonction d'insert dans ton code ?
As-tu bien un session start sur chacune de tes pages ?
Comment vas-tu de la page 1 à la page 2 ?
À quel moment appels tu les diverses fonctions que tu nous montres ?
Pourquoi as-tu deux fois une fonction d'insert dans ton code ?
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
1
24 nov. 2021 à 17:14
24 nov. 2021 à 17:14
J'ai une session start dans seulement un fichier que je l'inclus dans d'autres.
Pour aller de la page 1 à 2, c'est au moment de la connexion. Il prend le compte le plus récemment créé. Pour la fonction connexionUser c'est au moment de la connexion, et registerUSer au moment de la création de compte pour les user.
C'est l'admin qui créé les comptes.
Pour aller de la page 1 à 2, c'est au moment de la connexion. Il prend le compte le plus récemment créé. Pour la fonction connexionUser c'est au moment de la connexion, et registerUSer au moment de la création de compte pour les user.
C'est l'admin qui créé les comptes.
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
4 707
24 nov. 2021 à 17:46
24 nov. 2021 à 17:46
Bon.. il y aurait beaucoup de choses à dire sur ton code....
par exemple, qu'on ne doit pas stocker un mot de passe en clair dans la bdd mais le "hasher"
(pour ça, regarde la fonction php password_hash et password_verify )
Et puis.. en le découpant un peu mieux ça serait plus simple à lire et à maintenir.
sans compter que tu fais tes redirections AVANT d'avoir renseigné les variables de session.
Pour le coup, j'en ai profité pour lui faire un rapide lifting (sans le hash du password..ça je te laisse faire)
et j'ai structuré ta variable de session un peu mieux..
En gros
par exemple, qu'on ne doit pas stocker un mot de passe en clair dans la bdd mais le "hasher"
(pour ça, regarde la fonction php password_hash et password_verify )
Et puis.. en le découpant un peu mieux ça serait plus simple à lire et à maintenir.
sans compter que tu fais tes redirections AVANT d'avoir renseigné les variables de session.
Pour le coup, j'en ai profité pour lui faire un rapide lifting (sans le hash du password..ça je te laisse faire)
et j'ai structuré ta variable de session un peu mieux..
En gros
<?php //démarrage SESSION AVANT TOUT LE RESTE session_start(); class model { private $server = "localhost"; private $username = "root"; private $password = ""; private $db = "formation_db"; private $conn; function __construct(){ try { $this->conn = new mysqli( $this->server, $this->username, $this->password, $this->db ); } catch (Exception $e) { echo "Erreur de connexion" . $e->getMessage(); } } private function getUserByMailAndPassword($email, $userPassword) { $verifyQuery = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function getUserByMail($email) { $verifyQuery = "SELECT * FROM users WHERE email = '$email'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword) { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; return $this->conn->query($insertQuery); } public function connexionUser(){ if (isset($_POST['email']) && isset($_POST['userPassword'])) { $email = $_POST['email']; $userPassword = $_POST['userPassword']; if (empty($email)) { header("Location: index.php?error=Email requis"); exit(); } else if (empty($userPassword)) { header("Location: index.php?error=Mot de passe requis"); exit(); } else { $user = $this->getUserByMailAndPassword($email, $userPassword); if (!empty($user)) { $_SESSION['USER']['email'] = $row['email']; $_SESSION['USER']['nom'] = $row['nom']; $_SESSION['USER']['prenom'] = $row['prenom']; $_SESSION['USER']['userService'] = $row['userService']; $_SESSION['USER']['userFonction'] = $row['userFonction']; $_SESSION['USER']['userID'] = $row['userID']; // SI l'admin se connecte if ($row['adminRole'] == 1) { header("Location: admin/index_admin.php"); exit(); } else { header("Location: demandeur/index_demandeur.php"); exit(); } exit(); } else { //on vide les variables de session $_SESSION['USER'] = null; } } } else { header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } if (isset($_POST['adminRole']) && $_POST['adminRole'] == 1) { header('Location: index_admin.php'); } } public function registerUser(){ if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $userService = $_POST['userService']; $userFonction = $_POST['userFonction']; $adminRole = $_POST['adminRole']; $userPassword = $_POST['userPassword']; if (empty($nom)) { echo("Nom requis"); exit(); } else if (empty($email)) { echo("Adresse mail requis"); exit(); } else if (empty($userPassword)) { echo("Mot de passe requis"); exit(); } else { $user = $this->getUserByMail($email); if (!empty($user)) { echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>L'adresse mail " . $_POST['email'] . " </q> a déjà été utilisé</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; exit(); } else { $insert = $this->inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword); if ($insert) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b><q>" . $_POST['nom'] . " " . $_POST['prennom'] . "</q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div> <br><br>"; } else { echo "err"; exit; } } } } } }
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
1
25 nov. 2021 à 15:06
25 nov. 2021 à 15:06
Du coup j'ai modifié le code et la page s'affiche ainsi, j'ai déjà vidé les cookies :
"Cette page ne fonctionne paslocalhost vous a redirigé à de trop nombreuses reprises.
Essayez de supprimer les cookies.."
"Cette page ne fonctionne paslocalhost vous a redirigé à de trop nombreuses reprises.
Essayez de supprimer les cookies.."
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
4 707
>
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
25 nov. 2021 à 15:44
25 nov. 2021 à 15:44
Commence par mettre en commentaire les redirections qui se trouvent dans ton code histoire de voir les éventuelles erreurs de code.
Dis nous ce qui s'affiche alors.
Dis nous ce qui s'affiche alors.
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
1
>
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
Modifié le 25 nov. 2021 à 17:01
Modifié le 25 nov. 2021 à 17:01
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
4 707
>
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
25 nov. 2021 à 17:14
25 nov. 2021 à 17:14
C'est au niveau de la ligne 81
Tu veux dire que c'est cette redirection qui fou le bazar ?
Tu entres dans le ELSE si tu n'as pas envoyé l'identifiant et le mot de passe via le formulaire.... donc.. as tu bien envoyé les données depuis ton formulaire ??
A noter qu'on ne sait toujours rien du code de ton formulaire.. ni à quel(s) moment(s) tu fais appel aux fonctions qui se trouvent dans cette class...
Je te rappel également que nous partager une IMAGE de ton code.. ne nous permet pas de copier/coller si besoin et qu'au lieu de faire ça, il faut que tu prennes l'habitude d'utiliser les BALISES DE CODE.
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
1
>
jordane45
Messages postés
38321
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 décembre 2024
25 nov. 2021 à 18:14
25 nov. 2021 à 18:14
Le fichier model.php, qui contient la connexion, l'inscription, edit etc... :
Celui ci c'est le code où on doit se trouver en premier lieu pour se connecter index.php :
<?php session_start(); class model { private $server = "localhost"; private $username = "root"; private $password = ""; private $db = "formation_db"; private $conn; function __construct(){ try { $this->conn = new mysqli( $this->server, $this->username, $this->password, $this->db ); } catch (Exception $e) { echo "Erreur de connexion" . $e->getMessage(); } } private function getUserByMailAndPassword($email, $userPassword) { $verifyQuery = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function getUserByMail($email) { $verifyQuery = "SELECT * FROM users WHERE email = '$email'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword) { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; return $this->conn->query($insertQuery); } public function connexionUser(){ if (isset($_POST['email']) && isset($_POST['userPassword'])) { $email = $_POST['email']; $userPassword = $_POST['userPassword']; if (empty($email)) { header("Location: index.php?error=Email requis"); exit(); } else if (empty($userPassword)) { header("Location: index.php?error=Mot de passe requis"); exit(); } else { $user = $this->getUserByMailAndPassword($email, $userPassword); if (!empty($user)) { $_SESSION['USER']['email'] = $row['email']; $_SESSION['USER']['nom'] = $row['nom']; $_SESSION['USER']['prenom'] = $row['prenom']; $_SESSION['USER']['userService'] = $row['userService']; $_SESSION['USER']['userFonction'] = $row['userFonction']; $_SESSION['USER']['userID'] = $row['userID']; // SI l'admin se connecte if ($row['adminRole'] == 1) { header("Location: admin/index_admin.php"); exit(); } else { header("Location: demandeur/index_demandeur.php"); exit(); } exit(); } else { //on vide les variables de session $_SESSION['USER'] = null; } } } else { //header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } if (isset($_POST['adminRole']) && $_POST['adminRole'] == 1) { header('Location: index_admin.php'); } } public function registerUser(){ if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $userService = $_POST['userService']; $userFonction = $_POST['userFonction']; $adminRole = $_POST['adminRole']; $userPassword = $_POST['userPassword']; if (empty($nom)) { echo("Nom requis"); exit(); } else if (empty($email)) { echo("Adresse mail requis"); exit(); } else if (empty($userPassword)) { echo("Mot de passe requis"); exit(); } else { $user = $this->getUserByMail($email); if (!empty($user)) { echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>L'adresse mail " . $_POST['email'] . " </q> a déjà été utilisé</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; exit(); } else { $insert = $this->inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword); if ($insert) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b><q>" . $_POST['nom'] . " " . $_POST['prennom'] . "</q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div> <br><br>"; } else { echo "err"; exit; } } } } } function edit($id) { $data = null; $query = "SELECT userID, nom, prenom, email, userService, userFonction FROM users WHERE userID = " .$id; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function update($data) { $query = "UPDATE users SET nom = '$data[nom]' , prenom = '$data[prenom]' , email = '$data[email]' , userService = '$data[userService]' , userFonction = '$data[userFonction]' , userPassword = '$data[userPassword]' WHERE userID = '$data[userID]'"; if($sql = $this->conn->query($query)) { echo "<br><br><div class='card w-25 text-warning' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b> Vos informations ont bien été modifié</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour vers la page d'accueil pour rafraichir</a> </div>"; } else { echo "<br><br> <div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>Vos données n'ont pas pu être modifiées</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a> </div>"; } } function updateAdmin($data) { $query = "UPDATE users SET nom = '$data[nom]' , prenom = '$data[prenom]' , email = '$data[email]' , userService = '$data[userService]' , userFonction = '$data[userFonction]' , userPassword = '$data[userPassword]' WHERE userID = '$data[userID]'"; if($sql = $this->conn->query($query)) { echo "<br><br><div class='card w-25 text-warning' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b> Vos informations ont bien été modifié</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour vers la page d'accueil pour rafraichir</a> </div>"; } else { echo "<br><br> <div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>Vos données n'ont pas pu être modifiées</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a> </div>"; } } function viewProfile(){ $data = null; $query = "SELECT * FROM users WHERE userID "; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)){ $data[] = $row; } } return $data; } function getAllUtilisateur(){ $data = null; $query = "SELECT userID, nom, prenom, userFonction, userService FROM users WHERE adminRole = '0' ORDER BY nom ASC " ; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function getAllAdministrateur(){ $data = null; $query = "SELECT userID, nom, prenom, userFonction, userService FROM users WHERE adminRole = '1' ORDER BY nom ASC " ; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function deleteUser($user) { $query = "DELETE FROM users WHERE userID = " . $user; if($sql = $this->conn->query($query)) { header("Location: index_admin.php"); } else { return false; } } } ?>
Celui ci c'est le code où on doit se trouver en premier lieu pour se connecter index.php :
<?php include "model/model.php"; $model = new model; $login = $model->connexionUser(); ?> <!DOCTYPE html> <html lang="fr"> <header> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Form&nou - Connexion</title> <link href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css'> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script> <script src="https://kit.fontawesome.com/6c1ecc43dd.js" crossorigin="anonymous"></script> <link rel="stylesheet" href="Public/css/style.css"> <link rel="stylesheet" href="Public/css/header.css"> <link rel="stylesheet" href="Public/css/header_inscription.css"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"> <link rel="shortcut icon" type="image/png" href="Public/img/bg2.png"/> </header> <!--BODY --> <body> <!-- Header Inscription--> <div class="header__otherpage"> <div class="header__texture"></div> <div class="container__1"> <div class="header__navbar"> <div class="header__navbar--logo"> <a style="text-decoration:none" href="#" class="header__navbar--logo-title">Form&Nou</a> </div> <div class="header__navbar-toggle"> <span class="header__navbar-toggle-icons"></span> </div> </div> <div class="login-form"> <br><br> <!-- Formulaire --> <div class="form__title">Espace de connexion</div> <div class="login__form "> <div class="container__login"> <div class="main"> <div class="content__login"> <h2>Connexion</h2> <form action="" method="POST"> <?php if(isset($_GET['error'])) { ?> <div class="alert alert-danger"><img style="width:15px;margin-top:-2px" src="Public/img/warning.png"> <?php echo $_GET['error']; ?></div> <?php } ?> <input type="email" name="email" id="inputtest" placeholder="Adresse mail" required autofocus=""> <input type="password" name="userPassword" id="inputtest" placeholder="Mot de passe" required autofocus=""> <button class="btn" type="submit">Se connecter</button> <p class="account">Pas encore de compte? Veillez contacter les administrateurs : <b style="color: #FFBC42;">form&nou@alf.re</b> </p> </form> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php } ?> </div> <div class="form__img"> <img src="Public/img/login.svg"> </div> </div> </div> </div> </div> </div> </body> </html>
chrisCL974
Messages postés
63
Date d'inscription
jeudi 30 septembre 2021
Statut
Membre
Dernière intervention
25 novembre 2021
1
24 nov. 2021 à 18:33
24 nov. 2021 à 18:33
D'accord je vais l'essayer, merci