Session HTTP ou approche de base de données

16

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.

  1. L'utilisateur n'est pas connecté et ajoute un produit au panier (utilisateur anonyme)
  2. L'utilisateur est connecté et ajoute un produit au panier.

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.

  1. Lorsque l'utilisateur ajoute un produit, créez un panier dans la base de données et associez ce panier à cet utilisateur, au moment où il s'est connecté, déplacez ce panier vers l'utilisateur connecté.
  2. Créer un panier, y ajouter un produit et l'enregistrer dans la session, lorsque l'utilisateur connecté crée un panier dans la base de données et l'utilisateur connecté associé à ce panier avec l'utilisateur.

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

  1. Évolutivité
  2. La flexibilité
  3. Extensibilité
  4. L'application doit prendre soin de la vitesse

Vous cherchez des commentaires sur cet aspect pour décider du chemin.

Umesh Awasthi
la source
2
Pourquoi? Je gère plusieurs centaines de sites de commerce électronique et nous stockons tout dans des cookies ou localStorage (HTML5). De plus, les sessions utilisent de la mémoire. Lorsque nous nous connectons au compte, nous utilisons un cookie chiffré avec un horodatage. Nous n'avons pas besoin d'une session, car lorsqu'une page se charge, nous utilisons des techniques HTML5 pour stocker et utiliser sessionStorage après un seul chargement. Il s'agit de la technologie Web standard compatible IE8 +.
Jason Sebring
@LuiggiMendoza ok pourquoi pas.
Jason Sebring
@ zipstory.com: je voudrais également jeter un coup d'œil sur la solution basée sur HTML5, mais comme elle n'est pas prise en charge par quelques navigateurs, je suis un peu dubitative
Umesh Awasthi
@UmeshAwasthi Je suppose que mes clients ne se soucient pas de la très petite poignée de personnes sur les navigateurs inférieurs, mais c'est évidemment une mauvaise approche si c'est un cas différent dans votre trafic Web. Je sais que beaucoup de monde utilise XP sur IE7 et parfois IE6, mais certains de mes produits clients se trouvent dans des magasins tels que Nordstroms et Macy, etc. et ne semblent pas s'en inquiéter.
Jason Sebring du
@ zipstory.com: Je travaille avec une application de commerce électronique où le client veut même un support pour IE6, maintenant ce que vous direz à ce sujet :)
Umesh Awasthi

Réponses:

9

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.

Jakob Gade
la source
Qu'en est-il quand j'ai besoin d'afficher la page de détails du panier? devrions-nous stocker / récupérer les données de la session ou aller chercher un coup de base de données?
Umesh Awasthi
Si vous stockez les détails du panier dans la base de données, alors oui, vous devrez accéder à la base de données.
Jakob Gade
7

Les deux méthodes ont des avantages et des inconvénients, mais d'après moi, le stockage de base de données présente deux avantages assez importants.

  1. Rapports. Vous ne pouvez pas générer de rapport sur les paniers abandonnés, les taux de conversion, etc. si les données se trouvent dans la session.
  2. Délais d'expiration de session. Je serais ennuyé si j'allais dîner et revenais pour découvrir que mon panier avait été vidé parce que la session était expirée. J'imagine que le détaillant n'aimerait pas ça non plus. Nous voulons inciter l'utilisateur à acheter, pas à abandonner et à partir.
Jason P
la source
6

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'une bande de cookies à 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 nous l'avons fait 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 cataloguer les données, de sorte que la perspective de l'utilisateur sera un site Web à chargement ultra rapide et que le mobile fonctionnera également hors ligne (transactions moins). Bien sûr, vous devez faire attention à mettre à jour le manifeste lorsque les produits changent, etc.

Jason Sebring
la source
4

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:

  1. 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.
  2. 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
  3. Habituellement, le nettoyage automatique des anciennes sessions inactives est fait pour vous.

Inconvénients du stockage de session:

  1. Affinité de session, sauf si vous étudiez la réplication
  2. 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é.
  3. 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:

  1. 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.
  2. Moins de surcharge de mémoire dans l'application.
  3. 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:

  1. 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.
  2. 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?).
  3. 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:

  1. Pas besoin d'affinité de serveur.
  2. Facile sur la mémoire du serveur d'applications
  3. Les données de session inactive / abandonnée sont nettoyées pour vous.
  4. 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.
  5. Facile à coder

Inconvénients d'une session basée sur une base de données:

  1. 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.
  2. 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.

Brandon
la source
Vous avez manqué un avantage du stockage de base de données, habilement de l'organisation pour analyser les taux d'achat des choses placées dans des paniers d'achat.
HLGEM
@HLGEM Excellente idée - je n'y ai jamais pensé!
Brandon
Je pense à ce genre de choses parce que c'est moi qui fais l'analyse des données dans la base de données. Lors de la conception de bases de données, l'une des premières questions devrait être de savoir pourquoi nous aurons besoin de ces données et presque personne ne les demande.
HLGEM
3

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 traiter 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., c'est-à-dire similaires à Amazon.com.

Points à considérer:

  • Est-il nécessaire de sauvegarder des données?
  • Si oui, quelles données sont les plus importantes à sauvegarder pour mieux servir l'utilisateur?
  • Évolutivité + stockage de données - Comment allez-vous enregistrer les informations du panier pour une recherche rapide dans votre base de données pour prendre en charge de nombreux utilisateurs?
GeekByte
la source
3
Il aide également l'entreprise à analyser les ventes. À quelle fréquence un produit est-il placé dans un panier mais non acheté? Si le pourcentage est élevé, ils pourraient vouloir voir comment le produit est présenté ou le prix pour voir si les changements peuvent aider à améliorer le taux d'achat. L'enregistrement peut également permettre à l'utilisateur de voir ces articles rapidement s'il n'a pas commandé tehm le jour où il a regardé plutôt que de les chercher à nouveau. Alors peut-être que vous les avez mis dans votre panier mais que vous vouliez attendre jusqu'à demain (jour de paie) pour les acheter. Ainsi, la sauvegarde des données peut amener vos vrais clients à acheter plus de choses.
HLGEM
Mais en fin de compte, c'est un problème de définition des exigences et vous devez dire à votre entreprise ce que vous prévoyez de faire et vous assurer que c'est ce qu'elle attend avant de construire quoi que ce soit.
HLGEM
N'oubliez pas que vous devez penser à la commande et aux paniers d'achat du point de vue de ce dont l'entreprise pourrait avoir besoin pour les données à l'avenir. S'ils veulent analyser des données, il est préférable de les stocker. Les développeurs se bloquent sur l'interface utilisateur et oublient le but des données d'être stockées lors de la conception.
HLGEM
@HLGEM: Très bon point! J'ai répondu à cette question simplement en raison de la nécessité de prendre en charge la fonctionnalité de voiture pour un utilisateur invité par rapport à un membre du site. D'un point de vue commercial, il devrait y avoir un système de statistiques distinct qui dépend d'une sorte de système de base de données qui suit les produits en termes de géographie, de nombre d'utilisateurs, de produits connexes, d'achat par rapport aux rejets, etc.
GeekByte
0

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 vérifier le nombre de chariots créés dans la session.

Sudhanshu Umalkar
la source