Session et Cookie avec CodeIgniter 4 : Le guide complet

Accueil PHP 8 Session et Cookie avec CodeIgniter 4 : Le guide complet

Les notions de Session et Cookie avec CodeIgniter sont essentielles pour gérer la navigation, l’authentification et la personnalisation des applications web. Dans ce guide complet, nous allons plonger dans l’univers des sessions et cookies de CodeIgniter 4, avec des explications claires, des exemples concrets et une fréquence optimisée des mots-clés pour le SEO.

Qu’est-ce qu’une session avec CodeIgniter 4 ?

Une Session CodeIgniter permet de stocker temporairement des informations côté serveur entre les différentes requêtes HTTP d’un utilisateur. Cela peut inclure des données comme le nom de l’utilisateur connecté, son identifiant, son rôle ou encore des messages de confirmation. Pensez à bien sécuriser vos Sessions PHP.

Pourquoi utiliser une Session CodeIgniter ?

  • Gérer les connexions utilisateurs (authentification)
  • Conserver des données entre deux pages
  • Protéger certaines zones d’un site (back-office, tableau de bord)
  • Stocker temporairement des messages (flash messages)

Configuration de la session dans CodeIgniter 4

Par défaut, CodeIgniter 4 utilise le gestionnaire de session CodeIgniter\Session\Handlers\FileHandler, qui stocke les sessions dans des fichiers.

Étape 1 : Configurer la session dans app/Config/App.php

public $sessionDriver            = 'CodeIgniter\Session\Handlers\FileHandler';
public $sessionCookieName       = 'ci_session';
public $sessionExpiration       = 7200; // 2 heures
public $sessionSavePath         = WRITEPATH . 'session';

Étape 2 : Charger la session

Dans un contrôleur :

$session = session();

Dès que vous utilisez session(), vous accédez à la Session CodeIgniter.

Comment stocker une donnée dans une Session CodeIgniter

$session = session();
$session->set('username', 'Alban');

Comment lire une valeur de Session CodeIgniter

$username = $session->get('username');
echo "Bonjour, $username";

Comment vérifier si une variable de session existe

if ($session->has('username')) {
    echo "Utilisateur connecté.";
}

Supprimer une variable de session

$session->remove('username');

Détruire toute la session

$session->destroy();

Exemple concret : Authentification avec Session CodeIgniter

Imaginons un formulaire avec CodeIngiter pour une connexion à un accès sécurisé. Lorsqu’un utilisateur s’identifie correctement, on stocke son identifiant dans une Session CodeIgniter.

Contrôleur : LoginController.php

public function login()
{
    $session = session();
    $username = $this->request->getPost('username');
    $password = $this->request->getPost('password');

    // Exemple fictif de validation
    if ($username === 'admin' && $password === 'secret') {
        $session->set([
            'username' => $username,
            'isLoggedIn' => true
        ]);
        return redirect()->to('/dashboard');
    } else {
        $session->setFlashdata('error', 'Identifiants incorrects.');
        return redirect()->back();
    }
}

Utiliser une session dans une vue

<?php if (session()->has('username')): ?>
    <p>Bonjour <?= session('username') ?> !</p>
<?php endif; ?>

Messages temporaires (Flashdata) avec Session CodeIgniter

Les Flashdata permettent de stocker temporairement des messages (1 requête seulement), très utile après une redirection.

session()->setFlashdata('success', 'Vous êtes connecté !');

Et pour l’afficher dans la vue :

<?php if (session()->getFlashdata('success')): ?>
    <div class="alert alert-success">
        <?= session()->getFlashdata('success') ?>
    </div>
<?php endif; ?>

Un Cookie CodeIgniter est un petit fichier stocké côté client (navigateur). Il est utilisé pour mémoriser des informations sur le visiteur : préférences, langue, ou même un identifiant de session si vous utilisez des sessions basées sur cookie.

Voici quelques exemples d’utilisation des cookies avec CodeIgniter :

  • Sauvegarder la langue choisie par l’utilisateur
  • Mémoriser une préférence (thème sombre, tri par défaut…)
  • Pré-remplir un formulaire (email, pseudo)
  • Suivre l’utilisateur pour des statistiques anonymes
helper('cookie');

set_cookie('theme', 'dark', 3600); // Durée en secondes

Ce Cookie CodeIgniter nommé theme est valable 1 heure.

$theme = get_cookie('theme');
delete_cookie('theme');

Imaginons une application qui propose à l’utilisateur de choisir entre un thème clair ou sombre. Ce choix est stocké dans un Cookie CodeIgniter.

Contrôleur : ThemeController.php

public function changeTheme($theme)
{
    set_cookie('theme', $theme, 86400 * 30); // 30 jours
    return redirect()->back();
}

Dans la vue : appliquer le thème

$theme = get_cookie('theme') ?? 'light';
echo '<body class="' . esc($theme) . '">';

Sécurité des sessions et cookies dans CodeIgniter 4

Pour la Session CodeIgniter

  • Par défaut, CodeIgniter chiffre l’ID de session
  • Utiliser le stockage fichier ou base de données pour plus de sécurité
  • Éviter de stocker des informations sensibles (mot de passe, carte bancaire…)
  • Utiliser des cookies sécurisés (HTTPS uniquement)
set_cookie([
    'name' => 'token',
    'value' => 'xyz123',
    'expire' => 3600,
    'secure' => true, // transmission via HTTPS uniquement
    'httponly' => true // inaccessible en JavaScript
]);

Après avoir découvert les bases des Session CodeIgniter et Cookie CodeIgniter, nous allons approfondir leur utilisation avec des cas concrets, une gestion plus poussée, et des recommandations SEO et sécurité.

FonctionnalitéSession CodeIgniterCookie CodeIgniter
StockageServeur (par défaut dans des fichiers)Navigateur (côté client)
SécuritéPlus sécuriséMoins sécurisé, peut être modifié
Taille des donnéesIllimitée (ou presque)Environ 4 Ko max
PersistanceExpire à la fermeture du navigateur (ou durée définie)Peut durer des jours/semaines
Utilisation idéaleAuthentification, données sensiblesPréférences utilisateur, traçage simple

En résumé, on utilise une Session CodeIgniter pour stocker des données critiques et un Cookie CodeIgniter pour retenir des préférences ou effectuer un suivi léger.

Enregistrer les sessions en base de données avec CodeIgniter 4

Pour une meilleure sécurité ou si vous hébergez votre site sur plusieurs serveurs, il est conseillé de stocker les Session CodeIgniter dans une base de données. Veillez à bien configurer CodeIgniter pour la connexion à la base de données.

Étape 1 : Créer la table SQL

CREATE TABLE ci_sessions (
    id varchar(128) NOT NULL,
    ip_address varchar(45) NOT NULL,
    timestamp int(10) unsigned DEFAULT 0 NOT NULL,
    data blob NOT NULL,
    PRIMARY KEY (id),
    KEY `ci_sessions_timestamp` (`timestamp`)
);

Étape 2 : Modifier app/Config/App.php

public $sessionDriver = 'CodeIgniter\Session\Handlers\DatabaseHandler';
public $sessionSavePath = 'ci_sessions'; // nom de la table

Maintenant, vos Session CodeIgniter sont enregistrées dans MySQL (ou autre SGBD).

Détection automatique d’un utilisateur connecté

Dans votre BaseController, vous pouvez ajouter ce code :

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?
protected $session;

public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
    parent::initController($request, $response, $logger);

    $this->session = session();

    if ($this->session->has('isLoggedIn') && $this->session->get('isLoggedIn') === true) {
        // Utilisateur connecté
    } else {
        // Rediriger ou restreindre l'accès
    }
}

Cette logique centralisée vous permet de sécuriser automatiquement tous les contrôleurs enfants.

Gérer plusieurs utilisateurs avec Session CodeIgniter

Si votre application gère plusieurs types d’utilisateurs (admin, prof, élève…), stockez leur rôle dans la Session CodeIgniter :

$session->set([
    'username' => 'alban',
    'role' => 'admin',
    'isLoggedIn' => true
]);

Et vérifiez leur rôle :

if (session('role') === 'admin') {
    // Accès autorisé
}

Cas concret : panier d’achat avec Session CodeIgniter

Vous pouvez stocker un panier d’achat complet dans une Session CodeIgniter, sans base de données.

Ajouter un produit

$cart = session()->get('cart') ?? [];
$cart[] = ['id' => 12, 'name' => 'Agrafe Affnox', 'qty' => 2];
session()->set('cart', $cart);

Afficher le panier

foreach (session('cart') as $item) {
    echo $item['name'] . ' x ' . $item['qty'];
}

Pour des statistiques simples sans base externe, vous pouvez créer un identifiant unique par visiteur :

if (!get_cookie('visitor_id')) {
    set_cookie('visitor_id', uniqid('user_'), 86400 * 365); // 1 an
}

Ce Cookie CodeIgniter vous permet de suivre anonymement les visites répétées d’un même utilisateur.

Optimisation SEO et performance

1. Ne pas indexer les URLs contenant des identifiants de session

Les moteurs de recherche n’aiment pas les URLs comme :

https://mon-site.com/page?PHPSESSID=sd89as98d9as

👉 CodeIgniter 4 ne passe pas les sessions en URL par défaut. Tant mieux.

2. Respecter la RGPD

Si vous utilisez un Cookie CodeIgniter pour suivre l’utilisateur, pensez à l’informer et à demander son consentement (bannière, popup).

3. Réduire la taille des cookies

Plus les cookies sont volumineux, plus chaque requête HTTP est lente. Ne stockez jamais d’informations inutiles dans un Cookie CodeIgniter.

CritèreSession CodeIgniterCookie CodeIgniter
Sécurité★★★★☆★★☆☆☆
Taille maximaleÉlevée4 Ko
Facilité de mise en œuvre★★★★☆★★★☆☆
Performance (requête serveur)MoyenTrès bon
Usage recommandéAuthentification, panier, rôle utilisateurPréférences simples, suivi

Erreurs fréquentes à éviter

  • ❌ Stocker trop de données dans un Cookie CodeIgniter
  • ❌ Oublier de supprimer une Session CodeIgniter après déconnexion
  • ❌ Ne pas sécuriser ses cookies (securehttponly)
  • ❌ Utiliser une session pour un visiteur anonyme sans nécessité
  • ❌ Dépendre des cookies sans proposer d’alternative si désactivés

Bonnes pratiques

  • ✅ Toujours valider les données récupérées depuis une session ou un cookie
  • ✅ Limiter la durée de vie des cookies à ce qui est nécessaire
  • ✅ Détruire les sessions lors de la déconnexion
  • ✅ Sécuriser les cookies avec HTTPS (secure = true)
  • ✅ Protéger les sessions contre le hijacking avec un token CSRF
cookie et session codeIgniter 4

Conclusion

Les Session CodeIgniter et Cookie CodeIgniter sont deux outils indispensables pour créer des applications web dynamiques, sécurisées et personnalisées. Que ce soit pour gérer un panier d’achat, une connexion utilisateur, des préférences ou du suivi, vous avez désormais toutes les clés pour les utiliser de façon efficace.

En maîtrisant la Session CodeIgniter, vous contrôlez les données côté serveur avec plus de sécurité. En utilisant intelligemment les Cookie CodeIgniter, vous améliorez l’expérience utilisateur sans alourdir vos applications.

Allez plus loin avec CodeIgniter 4 :

Live on Twitch
  • 🔥 Vendredi 25 Avril 2025 >19h00

    HTML & SémantiqueStructure d'une page HTML