Je suis un peu confus quant à ce que devrait être mon approche, travaillant sur une conception de panier d'achat et j'ai besoin de stocker le panier d'achat en session ou dans la base de données, mais je ne sais pas quelle approche serait la meilleure.
Le premier cas est plus déroutant pour moi, car il peut y avoir de nombreux cas où l'utilisateur vient de visiter une boutique en ligne et d'ajouter un produit sans se connecter et il est tout à fait possible qu'il ne passe pas par un processus de paiement.
Mais nous devons toujours créer un panier pour cet utilisateur, afin de créer et enregistrer le panier, j'ai deux options.
Je sais que le système de panier basé sur la base de données et la session peuvent avoir des aspects positifs et négatifs, mais je ne sais pas lequel pourrait être la meilleure approche en tenant compte des points suivants
Vous cherchez des commentaires sur cet aspect pour décider du chemin.
J'irais pour une solution où un identifiant unique est attribué à tous les visiteurs lors de leur première visite sur le site. Peu importe qu'ils soient anonymes ou authentifiés. Lorsque des utilisateurs anonymes s'enregistrent, conservez l'ID unique.
Stockez le panier dans la base de données. Le stockage est bon marché, et cela ne devrait pas être un problème en termes de performances de faire une requête pour le panier de temps en temps.
Les deux méthodes ont des avantages et des inconvénients, mais selon moi, le stockage de base de données présente deux avantages assez importants.
La question est de supposer que vous avez besoin de sessions, ce qui n'est pas nécessaire sur mon marché de clients. Il se trouve que je gère plusieurs centaines de sites Web de commerce électronique et qu'une poignée d'entre eux reçoivent un trafic élevé. Nous n'utilisons jamais de sessions car elles ne sont pas évolutives sauf si elles sont développées, elles sont simplement plus lentes ou nécessitent plus de configuration. Les sessions utilisent de la mémoire et l'extraction de la base de données de l'état de session est très lente et nécessite davantage de pièces mobiles.
Au lieu de cela, nous utilisons HTML5 sessionStorage pour conserver toutes les informations utilisateur dont nous avons besoin de tirer encore et encore, mais sans avoir besoin d'un rountrip de cookie à chaque fois pour augmenter la bande passante. Il s'agit d'IE8 + et tous les autres navigateurs et appareils mobiles modernes sont compatibles avec cette technologie. MAIS vous pouvez simplement stocker le panier dans un cookie comme solution de rechange, comme c'est le cas précédemment. Voici un bon panier de cookies: http://simplecartjs.org/
Lorsque les utilisateurs se connectent ou se connectent, nous utilisons un cookie crypté avec un horodatage intégré.
Nous nous dirigeons également vers l'utilisation d'ApplicationCache, le cas échéant, ce qui réduira davantage le trafic Web en tant que note secondaire, car vous pouvez pré-extraire des ressources et même des données de catalogue, de sorte que la perspective de l'utilisateur sera un site Web à chargement ultra rapide et le mobile fonctionnera également hors ligne (transactions moins). Bien sûr, vous devez faire attention à mettre à jour le manifeste lorsque les produits changent, etc.
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:
Inconvénients du stockage de session:
Avantages du stockage de la base de données:
Inconvénients du stockage de base de données:
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:
Inconvénients d'une session basée sur une base de données:
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 comme un 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.
Examinons les deux cas d'utilisation que vous avez mentionnés
L'utilisateur n'est pas connecté et ajoute un produit au panier (utilisateur anonyme)
Dans ce cas, vous souhaitez certainement enregistrer les informations du panier de l'utilisateur dans une session pour bien servir l'utilisateur pendant sa session. S'il décide de se connecter/créer un compte, vous pouvez gérer cela en fonction du prochain cas d'utilisation. S'il ne se connecte pas, vous n'avez pas besoin de remplir votre base de données avec les informations de cet utilisateur invité car elles n'ont été utilisées que pour servir l'invité pendant la session. Ces données peuvent être traitées sur une base sans état, c'est-à-dire que l'état n'est pas enregistré d'une session à l'autre.
L'utilisateur est connecté et ajoute un produit au panier.
Dans ce cas, vous pouvez les gérer de la même manière que ci-dessus (sites de commerce électronique à l'ancienne) et également ajouter ces informations à la base de données et les associer à l'utilisateur. Ceci est principalement utilisé pour fournir des informations avec état (état enregistré de session en session) telles que "Historique de navigation du produit", "Recommandations", etc., par exemple similaires à Amazon.com.
Points à considérer:
Optez pour la session lorsque l'utilisateur n'est pas connecté. Même lorsqu'il est connecté, créez d'abord le panier dans la session et conservez-le dans la base de données uniquement lorsque l'utilisateur se déconnecte ou que la session expire.
Vous devez contrôler le nombre de chariots créés dans la session.