aboutsummaryrefslogtreecommitdiff
path: root/src/service/session.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/session.php')
-rw-r--r--src/service/session.php90
1 files changed, 0 insertions, 90 deletions
diff --git a/src/service/session.php b/src/service/session.php
deleted file mode 100644
index 24023e9..0000000
--- a/src/service/session.php
+++ /dev/null
@@ -1,90 +0,0 @@
1<?php
2// src/service/session.php
3
4// à voir si c'est mieux avec:
5//use Symfony\Component\HttpFoundation\Session\Session;
6
7// note: session_regenerate_id(true) se trouve dans UserController::connect
8
9use Doctrine\ORM\EntityManager;
10
11function startSession(EntityManager $entityManager): void
12{
13 ini_set('session.cookie_samesite', 'Strict');
14 ini_set('session.cookie_httponly', 'On');
15 ini_set('session.use_strict_mode', 'On');
16 ini_set('session.cookie_secure', 'On');
17 session_start();
18 validateSession($entityManager);
19}
20
21function validateSession(EntityManager $entityManager): void
22{
23 if(defined('IS_ADMIN')){
24 return;
25 }
26
27 $is_admin = false;
28
29 if(isset($_SESSION['user']['id'])){
30 $user = UserController::getUserById($_SESSION['user']['id'], $entityManager);
31
32 // visiteur normal
33 if(!$user){
34 session_unset();
35 session_destroy();
36 header('Location: ' . new URL(['message' => 'session_invalide']));
37 die;
38 }
39
40 // MAJ de la session avec CERTAINES données
41 $_SESSION['user']['username'] = $user->getLogin();
42 $_SESSION['user']['role'] = $user->getRole();
43
44 $is_admin = $user->getRole() === 'admin';
45 }
46
47 define('IS_ADMIN', $is_admin);
48
49 // si on a un jour besoin d'une variable globale au lieu d'une constante
50 //$GLOBALS['is_admin'] = $is_admin; // version modifiable 1
51 /*function isAdmin(): bool { // version modifiable 2
52 return $_SESSION['user']['role'] ?? null === 'admin';
53 }*/
54
55
56 // => système de cache à ajouter pour ne pas lire la BDD à chaque fois
57 //remplacer ce qui est en haut
58 /*$user = $_SESSION['user'] ?? null;
59 if (!$user) {
60 // visiteur
61 }
62 // Vérification périodique (ex: toutes les 5 minutes)
63 if (time() - $user['last_check'] > 300) {
64 $user = UserController::getUserById($user['id'], $entityManager);
65 if (!$user) {
66 session_destroy();
67 header('Location: /login.php');
68 exit;
69 }
70 // cache pour ne pas avoir à lire la BDD à chaque page
71 $_SESSION['user'] = [
72 'id' => $user['id'],
73 'role' => $user['role'],
74 'username' => $user['username'],
75 'last_check' => time()
76 ];
77 $user = $_SESSION['user'];
78 }
79 $is_admin = ($user['role'] === 'admin');*/
80
81
82 // améliorations possibles: ajouter expiration automatique + protection contre vol de session (IP / user-agent) sans casser ton app.
83}
84
85// nettoyage complet
86/*function cleanSession(){
87 unset($_SESSION['user']); // mémoire vive
88 session_destroy(); // fichier côté serveur
89 setcookie('PHPSESSID', '', time() - 86400, '/'); // cookie de session
90}*/ \ No newline at end of file