Aller au contenu

Nettoyer les sessions expirées

Objectif : supprimer périodiquement les sessions expirées avec cleanup_expired().

Ce que vous allez apprendre : une session expirée reste physiquement en base tant qu'on ne la supprime pas.
get() ignore les sessions expirées, mais la ligne demeure et la table grossit.
cleanup_expired() supprime en une passe toutes les lignes expirées, à lancer depuis un cron applicatif.

Deuxième palier du niveau intermédiaire de la progression Sessions BDD.

Ce que ce starter montre

  • pourquoi les sessions expirées s'accumulent en base ;
  • supprimer les sessions expirées avec cleanup_expired() ;
  • déclencher ce nettoyage depuis un cron applicatif.

Fonctions Forge utilisées

Fonction Rôle dans ce starter Référence
cleanup_expired() Supprime les sessions expirées et renvoie le nombre de lignes supprimées. Opt-ins

1. Pourquoi nettoyer

create(ttl=3600)  : la session expire dans une heure.
Une heure passe   : get() renvoie None, mais la ligne existe toujours.
Sans nettoyage    : la table forge_sessions grossit indéfiniment.

Comprendre ce code

  • get() filtre à la lecture : une session expirée est traitée comme absente.
  • La ligne correspondante n'est pas supprimée automatiquement à l'expiration.
  • Sans nettoyage régulier, la table conserve toutes les sessions jamais créées.

2. Supprimer les sessions expirées

from forge_mvc_sessions_db import DbSessionStore

store = DbSessionStore(ttl=3600)

supprimees = store.cleanup_expired()
print(f"{supprimees} sessions expirées supprimées")

Comprendre ce code

  • cleanup_expired() supprime en une seule requête toutes les lignes dont l'expiration est passée.
  • Elle renvoie le nombre de lignes supprimées, pratique pour un journal.
  • Les sessions encore valides ne sont jamais touchées.

3. Déclencher depuis un cron applicatif

Forge ne planifie rien tout seul : le nettoyage relève de l'application.
Exposez un point d'entrée que votre planificateur appelle, par exemple chaque nuit.

# scripts/cleanup_sessions.py
from forge_mvc_sessions_db import DbSessionStore

if __name__ == "__main__":
    store = DbSessionStore()
    n = store.cleanup_expired()
    print(f"{n} sessions expirées supprimées")
# crontab de l'application : tous les jours à 3 h du matin
0 3 * * * /chemin/vers/venv/bin/python /chemin/vers/scripts/cleanup_sessions.py

Cette ligne se pose dans une crontab, avec crontab -e ; ce n'est pas une commande à taper dans un terminal.

Comprendre ce code

  • Le script construit un store et appelle cleanup_expired(), rien de plus.
  • Le cron du système déclenche ce script à intervalle régulier.
  • La fréquence dépend de votre trafic : une fois par jour convient à la plupart des applications.

À retenir

  • Une session expirée reste en base tant qu'on ne la supprime pas.
  • cleanup_expired() supprime les sessions expirées et renvoie leur nombre.
  • Le déclenchement relève de l'application : un cron appelle un petit script dédié.

Après ce starter

Vous savez maintenir la table propre dans le temps.
Faisons le point sur ce niveau intermédiaire.

Bilan