-
Notifications
You must be signed in to change notification settings - Fork 0
Session
La classe Session gère le cycle de vie des sessions utilisateur. Elle sécurise les données via le Fingerprinting (IP + User Agent) et fournit un système robuste de protection contre les failles CSRF.
Namespace : Magepattern\Component\HTTP\Session
| Méthode | Paramètres | Retour | Description |
|---|---|---|---|
| __construct() | bool $ssl, string $name, array $config | void | Initialise la session avec des clés personnalisées. |
| start() | int $lifetime | bool | Démarre la session avec les paramètres de sécurité (HttpOnly, SameSite). |
| regenerate() | bool $deleteOld | string | Génère un nouvel ID de session (prévention de fixation). |
| getToken() | bool $force | string | Génère ou récupère le jeton CSRF de la session. |
| validateToken() | ?string $token | bool | Vérifie si le jeton fourni correspond à celui en session. |
| set() | string $key, mixed $val | void | Enregistre une donnée en session. |
| get() | string $key, mixed $def | mixed | Récupère une donnée ou une valeur par défaut. |
| destroy() | - | void | Supprime les données et détruit le cookie de session. |
L'instanciation permet de définir les noms des clés utilisées dans le tableau $_SESSION, ce qui est idéal pour éviter les conflits ou s'adapter à une structure de base de données.
use Magepattern\Component\HTTP\Session;
$session = new Session(true, 'MY_APP_SID', [
'ip_key' => 'user_ip_addr',
'csrf_key' => 'form_security_hash'
]);
$session->start();À chaque démarrage, la classe vérifie l'empreinte numérique du visiteur. Si l'adresse IP ou le navigateur change brusquement alors que la session est active, la session est invalidée pour empêcher le vol de session.
Exemple concret : Formulaire sécurisé
- Affichage (Génération du Token)
<input type="hidden" name="token" value="<?= $session->getToken(); ?>">- Valider un jeton (Contrôleur)
if ($session->validateToken($_POST['_token'] ?? null)) {
// Le formulaire est valide
} else {
// Tentative de faille CSRF détectée
Logger::getInstance()->log("CSRF Failure", "security", "warning");
}get(string $key, mixed $default = null): mixed
Récupère une donnée en session. Retourne $default si la clé n'existe pas.
set(string $key, mixed $value): void
Définit une donnée en session (démarre la session automatiquement si nécessaire).
regenerate(bool $deleteOldSession = true): string
Régénère l'identifiant de session. Note : Il est crucial d'appeler cette méthode dès qu'un utilisateur change de statut (ex: passage de visiteur à membre connecté).
public function loginAction($email, $password) {
if ($this->auth->verify($email, $password)) {
// 1. Sécurisation immédiate
$this->session->regenerate(true);
// 2. Stockage des infos
$this->session->set('user_id', $user->id);
$this->session->set('logged_at', time());
return true;
}
return false;
}