Stockage de sessions

On peut utiliser une base de données pour stocker les sessions. Cela permet de gérer la concurrence et éventuellement de partager les sessions entre plusieurs serveurs. On peut par exemple utiliser une table sessions avec les colonnes suivantes :

  • session_id : identifiant de session (clé primaire)
  • key : clé de la valeur de session
  • value : valeur de la clef de session
  • created_at : date de création de la session
  • updated_at : date de dernière mise à jour de la session

Avec un index et une contrainte d'unicité sur la combinaison session_id et key (ou une clef primaire composite).

CREATE TABLE sessions (
    session_id TEXT NOT NULL,
    key TEXT NOT NULL,
    value TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (session_id, key)
);

Pour lire la valeur d'une clef de la session, on peut faire une requête SQL suivante :

SELECT value FROM sessions WHERE session_id = ? AND key = ?

Pour écrire la valeur d'une clef de la session, on peut faire une requête SQL suivante (insertion ou mise à jour si conflit, permet de rendre la requète plus atomique) :

INSERT INTO sessions (session_id, key, value) VALUES (?, ?, ?)
    ON CONFLICT (session_id, key) DO
        UPDATE SET value = ?, updated_at = CURRENT_TIMESTAMP

Pour supprimer une session, on peut faire une requête SQL suivante :

DELETE FROM sessions WHERE session_id = ?

Un autre choix possible est de stocker toutes les données de session dans une seule colonne, en utilisant un format de sérialisation comme JSON. Redis est souvent utilisé pour stocker les sessions.