Si presume che l'archiviazione di sessione e l'archiviazione del database siano esclusivi. Non lo sono. Ma iniziamo assumendo che lo sono.
Il vantaggio dell'archiviazione della sessione è triplice:
- Non è necessario inserire esplicitamente i dati nel database. Basta semplicemente impostare una variabile di sessione e il gioco è fatto. Semplice e a basso rischio dal punto di vista funzionale.
- Non è necessario gestire il ciclo di vita di una visita utente e di un carrello della spesa in quanto contenitori / framework lo fanno per te
- Di solito la pulizia automatica delle vecchie sessioni di inattività è fatta per te.
Svantaggi dell'archiviazione delle sessioni:
- Affinità di sessione, a meno che tu non indaghino sulla replica
- Nessun failover, a meno che tu non indaghino sulla replica o sulla persistenza manuale dello stato della sessione su disco, il che può complicare.
- Tutte le sessioni devono essere memorizzate. Questo è amplificato se usi la replica.
Vantaggi dell'archiviazione del database:
- Non è necessario preoccuparsi dell'affinità di sessione o della replica dello stato. Puoi round-robin tutte le richieste.
- Minore sovraccarico di memoria nell'applicazione.
- Se l'ordine è completato, tutto finisce comunque nel database, quindi questo potrebbe rendere il completamento facile perché i dati sono già presenti.
Svantaggi dell'archiviazione del database:
- Carrelli abbandonati: alcuni utenti anonimi hanno aggiunto un articolo al carrello e sono scomparsi. I dati restano immutati per sempre, a meno che tu non abbia un qualche tipo di processo di scadenza.
- Devi trovare un modo per monitorare gli utenti e capire se, per una determinata richiesta, questo rappresenta una sessione di navigazione esistente o nuova. (sì, questo è probabilmente facile se usi un cookie, ma come fai a garantire che due utenti non finiscano con lo stesso id?).
- Altro codice
Non hai menzionato quale piattaforma stai usando. Cercherò un approccio che utilizzi una sessione supportata da database in cui i dati di sessione sono disponibili solo in memoria durante la vita di un ciclo di richiesta / risposta, caricandolo dal database e salvandolo nel database. Questo mi ha servito bene in passato.
Vantaggi di una sessione supportata da database:
- Nessuna necessità di affinità con il server.
- Facile nella memoria del server delle app
- I dati di sessione inutilizzati / abbandonati vengono eliminati automaticamente.
- Il ciclo di vita della prima visita dell'utente, la visita ripetuta, la fine della sessione sono tutti pensati per te.
- Facile da codificare
Svantaggi di una sessione supportata da database:
- Configurazione: devi investigare sul tuo contenitore, che si tratti di PHP, Java EE (Tomcat, Jetty, JBoss, ecc.), node.js + express.js o cosa non lo supporta e fornisci la configurazione corretta.
- Potrebbe essere necessario caricare questo test poiché si aggiungono 2 operazioni del database per richiesta.
C'è una terza possibilità, che qualcuno ha toccato prima. Puoi saltare completamente l'uso delle sessioni e utilizzare l'archiviazione lato client inserendo tutto in un cookie o in una memoria locale html.
Lascerò i pro / contro di ciò come un esercizio per te, ma ti darò un suggerimento che per l'archiviazione html5, la compatibilità del browser potrebbe essere qualcosa da rivedere attentamente.
Ho delineato i fatti per te. Spero che questo ti aiuti a prendere la decisione giusta per la tua situazione.