Vous supposez que le stockage de session et le stockage de base de données sont exclusifs. Ils ne le sont pas. Mais commençons par supposer qu'ils le sont.
L'avantage du stockage de session est triple:
- Pas besoin d'insérer explicitement des données dans la base de données. Vous définissez simplement une variable de session et vous avez terminé. Fonctionnel simple et à faible risque.
- Pas besoin de gérer le cycle de vie d'une visite utilisateur et d'un panier d'achat car les conteneurs / frameworks le font pour vous
- Habituellement, le nettoyage automatique des anciennes sessions inactives est fait pour vous.
Inconvénients du stockage de session:
- Affinité de session, sauf si vous étudiez la réplication
- Pas de basculement, sauf si vous étudiez la réplication ou la persistance manuelle de l'état de la session sur le disque, ce qui peut devenir compliqué.
- Toutes les sessions doivent être stockées en mémoire. Ceci est amplifié si vous utilisez la réplication.
Avantages du stockage de la base de données:
- Pas besoin de vous soucier de l'affinité de session ou de la réplication d'état. Vous pouvez effectuer un tour de rôle pour toutes les demandes.
- Moins de surcharge de mémoire dans l'application.
- Si la commande est terminée, tout finit quand même dans la base de données, ce qui pourrait faciliter la finalisation car les données sont déjà présentes.
Inconvénients du stockage de base de données:
- Chariots abandonnés - un utilisateur anonyme a ajouté un article à son panier et a disparu. Ces données restent éternelles, sauf si vous avez une sorte de processus d'expiration.
- Vous devez trouver un moyen de suivre les utilisateurs et de déterminer si, pour une demande donnée, cela représente une session de navigation existante ou nouvelle. (oui, c'est probablement facile si vous utilisez un cookie, mais comment vous assurez-vous que deux utilisateurs ne se retrouvent pas avec le même identifiant?).
- Plus de code
Vous n'avez pas mentionné la plateforme que vous utilisez. Je rechercherais une approche qui utilise une session basée sur une base de données où les données de session n'existent qu'en mémoire pendant la durée d'un cycle de demande / réponse, en les chargeant à partir de la base de données et en les sauvegardant dans la base de données. Cela m'a bien servi dans le passé.
Avantages d'une session basée sur une base de données:
- Pas besoin d'affinité de serveur.
- Facile sur la mémoire du serveur d'applications
- Les données de session inactive / abandonnée sont nettoyées pour vous.
- Le cycle de vie de la première visite de l'utilisateur, la visite répétée, la fin de la session est tout compris pour vous.
- Facile à coder
Inconvénients d'une session basée sur une base de données:
- Configuration - vous devez enquêter sur votre conteneur, qu'il s'agisse de PHP, Java EE (Tomcat, Jetty, JBoss, etc.), node.js + express.js ou quoi que ce soit le prendre en charge et fournir la bonne configuration.
- Vous devrez peut-être charger le test car vous ajoutez 2 opérations de base de données par demande.
Il y a une troisième possibilité, que quelqu'un a évoquée plus tôt. Vous pouvez ignorer l'utilisation des sessions et utiliser le stockage côté client en intégrant tout dans un cookie ou en stockage local html.
Je vais vous laisser les avantages / inconvénients de cet exercice, mais je vais vous donner un indice que pour le stockage html5, la compatibilité du navigateur peut être quelque chose à examiner attentivement.
Je vous ai expliqué les faits. J'espère que cela vous aidera à prendre la bonne décision pour votre situation.