diff --git a/pages/gestion/administration.php b/pages/gestion/administration.php
index 9a43552..7e376f4 100644
--- a/pages/gestion/administration.php
+++ b/pages/gestion/administration.php
@@ -4,8 +4,11 @@
* Page centrale de gestion des fonctionnalités du serveur de courriel.
* C'est de cette page qu'est appelé l'ensemble des fonctionnalités du portail.
*/
-
session_start();
+
+require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/authentification.php");
+validationCookie($pdo);
+
require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
testPrivileges();
require_once($_SERVER["DOCUMENT_ROOT"]."/inclusions/entete.php");
diff --git a/pages/visiteurs/formulaire_accueil.php b/pages/visiteurs/formulaire_accueil.php
index 2a7e68e..edef366 100644
--- a/pages/visiteurs/formulaire_accueil.php
+++ b/pages/visiteurs/formulaire_accueil.php
@@ -6,6 +6,10 @@
* Redirige les tentative d'identification pour traitement et test de légitimité.
*/
session_start();
+
+require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/authentification.php");
+validationCookie($pdo);
+
if (isset($_SESSION['id_utilisateur']) && isset($_SESSION['pseudo_utilisateur']) && isset($_SESSION['nom_utilisateur']) && isset($_SESSION['privilege_utilisateur']) && !empty($_SESSION['id_utilisateur']) && !empty($_SESSION['pseudo_utilisateur']) && !empty($_SESSION['nom_utilisateur']) && !empty($_SESSION['privilege_utilisateur'])) {
header ("location: /pages/gestion/administration.php?page=accueil");
die();
@@ -45,6 +49,8 @@ require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/messages/messages.ph
+
+
diff --git a/services/fonctions/sessions/authentification.php b/services/fonctions/sessions/authentification.php
index bcdc3d3..84cde9a 100644
--- a/services/fonctions/sessions/authentification.php
+++ b/services/fonctions/sessions/authentification.php
@@ -17,7 +17,7 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
$sql = $pdo->prepare($req);
- $sql->bindValue(':identifiant', $identifiant);
+ $sql->bindValue(':identifiant', htmlspecialchars($identifiant));
$sql->execute();
$result = $sql ->fetchAll(PDO::FETCH_ASSOC);
@@ -51,4 +51,66 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
return false;
}
+function initValeursSession($result) {
+ $_SESSION['id_utilisateur'] = $result[0]['id'];
+ $_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur'];
+ $_SESSION['nom_utilisateur'] = $result[0]['nom_complet'];
+ $_SESSION['privilege_utilisateur'] = $result[0]['privilege'];
+ $_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur'];
+}
+
+function creerCookie($result) {
+ $cookie_params = array (
+ 'expires' => time() + 60*60*24*30,
+ 'path' => '/',
+ 'domain' => $_SERVER['HTTP_HOST'],
+ 'secure' => false, // Mettre à true en prod (PENSER À LE FAIRE DANS deconnexion.php ET "Prolongement de la durée du cookie" AUSSI !)
+ 'httponly' => true,
+ 'samesite' => 'Strict'
+ );
+ setcookie('souvenir-session', htmlspecialchars($_SESSION['pseudo_utilisateur']).'|--@--|'.hash('sha3-512', $result['0']['id'].$result['0']['utilisateur'].$result['0']['mot_de_passe']), $cookie_params);
+}
+
+function validationCookie($pdo) {
+ if (isset($_COOKIE['souvenir-session'])) {
+ if (!isset($_SESSION['id_utilisateur'])) {
+ $donnees_cookie=explode('|--@--|', $_COOKIE['souvenir-session']);
+ try {
+ $req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
+
+ $sql = $pdo->prepare($req);
+ $sql->bindValue(':identifiant', htmlspecialchars($donnees_cookie['0']));
+ $sql->execute();
+
+ $result = $sql ->fetchAll(PDO::FETCH_ASSOC);
+ $comptage = count($result);
+
+ }
+ catch(PDOException $e) {
+ die ("Erreur lors du traitement de la requête : " . $e->getMessage());
+ }
+
+ if ($comptage == 1) {
+ if (hash('sha3-512', $result['0']['id'].$result['0']['utilisateur'].$result['0']['mot_de_passe'])===$donnees_cookie['1']) {
+ // Cookie valide. On initialise les variables de sessions pour le bon fonctionnement du site.
+ initValeursSession($result);
+ }
+ else {
+ // Cookie invalide (probablement modifié par l'utilisateur).
+ return false;
+ }
+
+ return $result;
+ }
+ else
+ return false;
+ }
+ // Prolongement de la durée du cookie
+ setcookie('souvenir-session', $_COOKIE['souvenir-session'], ['expires' => time() + 60*60*24*30, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], 'secure' => false, 'httponly' => true, 'samesite' => 'strict']);
+ }
+ else
+ return false;
+
+}
+
?>
\ No newline at end of file
diff --git a/services/traitements/utilisateurs/deconnexion.php b/services/traitements/utilisateurs/deconnexion.php
index 2b20630..810d91a 100644
--- a/services/traitements/utilisateurs/deconnexion.php
+++ b/services/traitements/utilisateurs/deconnexion.php
@@ -11,9 +11,11 @@ if (!empty($_GET['succes'])) {
$succes=$_GET['succes'];
}
// Destruction des variables de la session
-session_unset ();
+session_unset();
// Destruction de la session
-session_destroy ();
+session_destroy();
+//Destruction du cookie de maintient de session
+setcookie('souvenir-session', '', time() - 3600, '/', $_SERVER['HTTP_HOST'], false, true);
// Nous sommes obligés de passer par la variable transitoire $succes car le session_unset détruit $_GET...
if (!empty($succes)) {
header('location: /pages/visiteurs/formulaire_accueil.php?succes='.$succes);
diff --git a/services/traitements/utilisateurs/identification.php b/services/traitements/utilisateurs/identification.php
index 23e2b51..9f765f3 100644
--- a/services/traitements/utilisateurs/identification.php
+++ b/services/traitements/utilisateurs/identification.php
@@ -17,14 +17,15 @@ if (isset($_POST['identifiant']) && isset($_POST['mdp']) && !empty($_POST['ident
$result = validationIdentifiants($pdo,$_POST['identifiant'],trim($_POST['mdp']));
if($result) {
- $duree_session=2592000;
- session_set_cookie_params($duree_session);
session_start();
- $_SESSION['id_utilisateur'] = $result[0]['id'];
- $_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur'];
- $_SESSION['nom_utilisateur'] = $result[0]['nom_complet'];
- $_SESSION['privilege_utilisateur'] = $result[0]['privilege'];
- $_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur'];
+ initValeursSession($result);
+
+ /**
+ * Création d'un cookie permettant le maintient de session si l'utilisateur a coché la case "Se souvenir de moi".
+ */
+ if (isset($_POST['souvenir-session']) && $_POST['souvenir-session']==="on") {
+ creerCookie($result);
+ }
if (isset($_SESSION['pseudo_utilisateur']) && !empty($_SESSION['pseudo_utilisateur']) && $_SESSION['privilege_utilisateur']==="administrateur") {
header ("location: /pages/gestion/administration.php?message=bienvenue&page=accueil");
@@ -38,7 +39,6 @@ if (isset($_POST['identifiant']) && isset($_POST['mdp']) && !empty($_POST['ident
echo "Ça ne devrait pas arriver.";
die();
}
-
}
else {
header('Location: /pages/visiteurs/echec_auth.php');