Deconnexion non voulue

XaaE
Invité n'ayant pas de compte PHPfrance

10 avr. 2021, 17:08

Bonjour à tous !
J'ai un site sur lequel on peut se connecter et s'inscrire où tout fonctionne normalement. Une fois inscrit et connecté, on accède à diverses fonctionnalités sur le site. Cependant, lorsqu'on arrive sur la page d'accueil en étant connecté et que l'on clique sur un lien du site, ça nous deconnecte, et donc lorsqu'on reclique sur la page d'accueil, on y arrive en étant déconnecté et il faut donc se reconnecter... J'ai cherché plusieurs solutions mais rien de ce que j'ai trouvé ne fonctionne. Je vous met mon code, et merci d'avance pour votre aide ;)

La page d'accueil :

Code : Tout sélectionner

<?php session_start(); require 'header.php'; require 'BDD.php'; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Tournois de sport</title> </head> <body> <?php if ((!empty($_POST['mail']))&&(!empty($_POST['password']))){ $username = $_POST['mail']; $password = $_POST['password']; $req = $bdd->prepare('SELECT * FROM utilisateur WHERE email = :email'); //On récup l'email et le hash du MDP correspondant à l'utilisateur dans la BDD $req->execute(array( 'email'=>$username, )); $utilisateur = $req->fetch(); $mdp = $utilisateur["motdepasse"]; //Recupérer le role pour afficher certaines parties $role = $utilisateur["role"]; if(password_verify($password, $mdp)){ //Si c'est un joueur, ... if ($role == 0){ echo "Bienvenue sur notre site ".$username." !"; } //Si c'est un capitaine d'équipe, ... elseif ($role == 1){ echo "Bienvenue sur notre site ".$username." !"; } //Si c'est un admin, ... elseif ($role == 2){ echo "Bienvenue sur notre site ".$username." !"; } ?> <header> <h1>Présentation du site</h1> <p>Ce site a pour vocation de permettre à chaque équipes de s'inscrire pour le tournois de Football qui aura lieux en Juin 2021.<br /> L'organisateur du tournois peut créer le tournois dans la section "Créer un tournois".<br /> Les capitaines d'équipes doivent inscrire leur équipes au tournois dans la section "Inscrire une équipe".<br /> Chaque participants s'engage à lire la section "Règles des tournois" avant le début de la compétition. </p> <?php } else{ $message='Identifiant ou mot de passe incorrect'; echo '<script type="text/javascript">window.alert("'.$message.'");window.location.replace("PageConnexion.php");</script>'; } } else { ?> <p>Veuillez vous connecter pour accéder aux différentes informations.</p> <p>Rendez vous sur cette <a href="PageConnexion.php">page</a></p> <p>Si vous n'êtes pas inscrits, rendez vous <a href="Inscription.php"> ici </a> pour vous inscrire</p> <?php } ?> </body> </html>
La page de connexion :

Code : Tout sélectionner

<?php session_start(); require 'header.php'; require 'BDD.php'; ?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Page Connexion</title> <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" /> </head> <body> <!-- BLOCK CONNEXION --> <div id="container"> <form action="accueil.php" method="POST"> <h1> Connexion </h1> <label><b>Mail</b></label> <input type="text" placeholder="Entrer le mail" name="mail" required> <label><b>Mot de passe</b></label> <input type="password" placeholder="Entrer le mot de passe" name="password" required> <input type="submit" id='submit' value='LOGIN' > <p>Pas encore inscrit ? Rendez vous sur la page d'<a href="Inscription.php">inscription</a> !</p> <p>Vous êtes visiteur ? Rendez-vous <a href="accueilVisiteurs.php">ici</a> !</p> </form> </div> <!-- FIN BLOCK CONNEXION --> </body> </html>
Et une page qui est une fonctionnalité du site :

Code : Tout sélectionner

<?php session_start(); require 'header.php'; require 'BDD.php'; ?> <body> <header> <h1>Première étape pour l'inscription au tournois</h1> </header> <aside> <ul> <li><a href="siteProjet.html">Page d'accueil</a></li> <li><a href="inscriptionEquipe1.php">Inscrire une équipe (première étape)</a></li> <li><a href="regles.php">Règles des tournois</a></li> </ul> </aside> <section> <h2>Informations à remplir pour inscrire votre équipe</h2> <form action="inscriptionEquipe2.php" method="POST"> <p> <label>Nom de l'equipe : <input type="text" name="nomEquipe" /> </label> </p> <p> <label>Adresse email du capitaine d'équipe : <input type="email" name="adresseEmail" /> </label> </p> <p> <label>Niveau de l'équipe : <input type="number" name="nivEquipe" min=1 max=100 value=1 /> </label> </p> <p> <label>Nombre de joueurs dans l'équipe : <input type="number" name="nbrJoueursEquipe" min=1 max=25 value=1 /> </label> </p> <?php $req0 = "SELECT idTournoi FROM tournois ORDER BY idTournoi DESC LIMIT 1"; $req2 = $bdd->prepare($req0); $req2->execute(); $maxId = $req2->fetch(); $maxId = $maxId['idTournoi']; $req3 = $bdd->prepare('SELECT nom FROM tournois WHERE idTournoi = ?'); ?> <p> <label>Nom du tournois où vous souhaitez inscrire votre équipe : </label>"; <select name="id_du_tournois" type="number"> <?php for ($i = 0; $i <= $maxId; $i++): ?> <?php $req3->execute(array($i)) ?> <?php while ($nomT = $req3->fetch()): ?> <option value='<?php echo $i ?>'> <?php echo $nomT['nom'] ?> --> ID : <?php echo $i ?></option> <?php endwhile; ?> <?php endfor ?> </select> </p> <p> <input type="submit" value="Etape suivante" /> </form> </section>

Eléphant du PHP | 111 Messages

10 avr. 2021, 17:43

Je ne vois nulle part ou tu créé une variable $_SESSION['qqchose'] et ou tu la teste ce qui te permettrait de vérifier que l'utilisateur soit bien passé par la case départ et l'y renvoyer le cas échéant.

Qui plus est d'après ce que j'ai appris avec le nombre de murs que j'ai heurté, c'est que la SESSION est fermée plus ou moins automatiquement au bout de 24 minutes de non action sur le site. Du coup je suis passé par les variables cookies.

Je ne sais pas si ce que j'ai écrit a un sens mais au moins j'aurai essayé d'aider

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 avr. 2021, 19:55

Qui plus est d'après ce que j'ai appris avec le nombre de murs que j'ai heurté, c'est que la SESSION est fermée plus ou moins automatiquement au bout de 24 minutes de non action sur le site. Du coup je suis passé par les variables cookies.
Oui, c'est la config par défaut, et ça peut se changer :
https://apical.xyz/fiches/passer_de_l_i ... ne_session


Pour l'anecdote cette valeur étrange remonte à PHP3 qui ne gérait pas les sessions, un module avait été développé pour cela par un développeur tiers, et la durée de session par défaut était de 1440 minutes (soit 24 heures/1 journée)

Mais quand les sessions ont été intégrées nativement dans PHP ils ont repris la même config par défaut de ce module sauf que toutes les valeurs de timeout dans le php.ini sont en secondes :-D
Du coup la valeur initiale de 1440 minutes, est devenu 1440 secondes soit 24 minutes, et ça n'a pas changé depuis ! :-D
Quand tout le reste a échoué, lisez le mode d'emploi...

XaaE
Invité n'ayant pas de compte PHPfrance

10 avr. 2021, 20:59

Merci pour vos réponses !
Je ne vois nulle part ou tu créé une variable $_SESSION['qqchose'] et ou tu la teste ce qui te permettrait de vérifier que l'utilisateur soit bien passé par la case départ et l'y renvoyer le cas échéant.

Qui plus est d'après ce que j'ai appris avec le nombre de murs que j'ai heurté, c'est que la SESSION est fermée plus ou moins automatiquement au bout de 24 minutes de non action sur le site. Du coup je suis passé par les variables cookies.

Je ne sais pas si ce que j'ai écrit a un sens mais au moins j'aurai essayé d'aider
Je ne vois pas vraiment ce qu'il faut faire ? Car j'avais essayé de créer une variable de session si l'utilisateur saisissait un bon email et mot de passe, alors dans cette condition du fichier accueil

Code : Tout sélectionner

if(password_verify($password, $mdp)){
je créer des variables de session, mais en quittant la page accueil puis en y retournant j'étais à nouveau déconnecté

Eléphant du PHP | 111 Messages

10 avr. 2021, 22:15

Re,
en debut de page avant tout code html tu fais un : session_start()
une fois le login validé tu mets le username de ton visiteur authentifié dans une variable $_SESSION['username']=$username
et du coup à chaque début de page
session_start()
 if (!isset($_SESSION['username'])) header("Location: login.php");}
comme ça à chaque début de page si le gars est arrivé dans ta page sans le login il devra repasser par la case départ.

avec cette limite de 24min expliqué par @rthur et la possibilité de le changer à ce sujet merci pour l'anecdote et la solution d'un de mes nombreux problemes

XaaE
Invité n'ayant pas de compte PHPfrance

11 avr. 2021, 15:27

Super merci, tout fonctionne maitenant ! Effectivement l'anecdote est intéressante :D