PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-12-2016 11:03:40

Mina-T
Membre
Inscription : 29-12-2016
Messages : 1

Problème de déconnexion après identification (sessions PHP)

Bonjour,

Je travaille sur un exercice PHP avec l'utilisation de sessions, et je rencontre quelques difficultés. (je suis une grande débutante)

Explications :

J'ai une première page avec un formulaire d'identification : id.php
Cette page doit aller sur la page01.php qui contient des informations diverses. Depuis page01.php, on peut aller vers d'autres pages.
Toutes les pages du site (j'en ai que 2 : page01.php et page02.php) sont protégées dans leur accès grâce à un fichier inclus en début de fichier : auth.php

J'ai une table logins dans laquelle sont stockées en dur des couples identifiant et mot de passe permettant l'accès aux pages + le nombre de pages visitées pour chaque personne qui s'est connectée.

L'authentification semble à peu près fonctionner (me dire si j'ai fait des bêtises).
Si l'identifiant n'est pas bon, on retourne au formulaire, et on affiche un message comme quoi l'identifiant n'est pas bon.
Idem si le mot de passe n'est pas bon, message comme quoi le mot de passe n'est pas bon. J'ai utilisé pour cela les sessions, je sais pas si c'est la meilleure méthode ?
Si un couple d'identifiant / mot de passe est retrouvé dans la base de données, alors on peut accéder aux pages page01.php et page02.php.

Mon souci :
je voudrais créer un bouton (voire mieux, un lien "Se déconnecter") en haut des pages page01.php et page02.php qui permet de se déconnecter et d'être redirigé vers la page avec le formulaire (id.php). J'ai fait ça avec un session_destroy et une redirection.
La redirection vers le formulaire d'authentification fonctionne, mais le problème est que si après cela je reclique sur le bouton OK du formulaire avec les champs vides, je parviens à nouveau à accéder aux pages du site. J'en déduis que la déconnexion ne fonctionne pas correctement.
J'ai lu à droite à gauche qu'il fallait aussi supprimer le cookie de session ? Est-ce exact ? Comment faire concrètement avec le code ci-dessous ?

Je vous remercie beaucoup d'avance pour votre aide.

Page id.php


<?php
session_start();
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>

<body>

<h1>Accès au site</h1>

<?php
if (isset($_SESSION["message"]))
{
  $message = $_SESSION["message"]; 
}
else
{
  $message = "";
}
echo $message ;
?>

<form name="formulaire" method="post" action="page01.php">
  <label for="identifiant">Identifiant : </label>
  <input type="text" name="identifiant" id="identifiant" />
  <br />
  <label for="motdepasse">Mot de passe : </label>
  <input type="password" name="motdepasse" id="motdepasse" />
  <br/><br/>
  <input type="submit" name="envoyer" value="OK" />
</form>

</body>
</html>
 

Page auth.php


<?php
session_start();

if (isset($_POST["envoyer"]))
{
  $id = $_POST["identifiant"];
  $passe = $_POST["motdepasse"];
  $_SESSION["id"] = $id ;
  $_SESSION["passe"] = $passe ;
}

if (isset($_POST["detruiresession"]))
{
  session_destroy();
  header('location:id.php');
}

if (!isset($_SESSION['compteur']))
{
  $_SESSION['compteur'] = 0;
}
else
{
  $_SESSION['compteur']++; 
}

try  //connexion à la base de données
{
  $connexion = new PDO('mysql:host=localhost;dbname=acces;charset=utf8', 'root', '');
  $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
  die('Erreur : '.$e->getMessage());
}

// creation de la table logins (requête à faire avec PHPmyadmin)
// $creationtable = $connexion->exec('CREATE TABLE logins (identifiant CHAR(8) PRIMARY KEY NOT NULL, motdepasse CHAR(8), nombrepages INT)');


// requête de sélection
$requete = $connexion->query('SELECT identifiant, motdepasse, nombrepages FROM logins WHERE identifiant="'.$_SESSION["id"].'" ORDER BY identifiant DESC');
while ($donnees = $requete->fetch())   //doit-on faire une boucle ? (un seul résultat attendu)
{
  $identifiant = $donnees['identifiant'] ;
  $motdepasse = $donnees['motdepasse'] ;
  $nombrepages = $donnees['nombrepages'] ;
}

if (isset($identifiant)&&isset($motdepasse))
{
  if ($_SESSION["id"] != $identifiant)
  {
    $_SESSION["message"] = "<p>Identifiant incorrect !</p>";
    header('location:id.php');
  }
  else if ($_SESSION["passe"] != $motdepasse)
  {
    $_SESSION["message"] = "<p>Mot de passe incorrect !</p>";
    header('location:id.php');
  }
}

$nombrepagesvisitees = $_SESSION['compteur'] ;
// echo "c'est la ". $nombrepagesvisitees . "ème fois que vous visitez cette page";

// requête d'insertion
$req = $connexion->exec('UPDATE logins SET nombrepages='.$nombrepagesvisitees.' WHERE identifiant="'.$_SESSION["id"].'"');
?>
 

Page page01.php  (code quasi identique pour page02.php)


<?php
  include "auth.php";
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>

<body>
<!-- bouton de déconnexion -->
<form method="post" action="page01.php">
  <input type="submit" name="detruiresession" value="Se déconnecter" />
</form>

<h1>Page 01</h1>
<p>Aller à la <a href="page02.php">page 02</a></p>
<p>Blablabla</p>

</body>
</html>
 

Dernière modification par Mina-T (29-12-2016 11:10:08)

Hors ligne

Pied de page des forums