Ajout de la fonction "Se souvenir de moi"

pull/4/head
ycharbi 2 years ago
parent 1c6af168a6
commit 0b5db50d5d

@ -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");

@ -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
<input type="password" name="mdp" class="form-control" id="mdp" placeholder="Mot de passe" required/>
<label for="mdp">Votre mot de passe</label>
</div>
<input type="checkbox" name="souvenir-session" id="souvenir-session" checked/>
<label for="souvenir-session">Se souvenir de moi</label>
<button id="envoyer" type="submit" class="btn btn-primary">envoyer</button>
</form>
</div>

@ -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;
}
?>

@ -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);

@ -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');

Loading…
Cancel
Save