Si presuppone che l'archiviazione della sessione e l'archiviazione del database siano esclusivi. Non lo sono. Ma partiamo dal presupposto che lo siano.
Il vantaggio della memorizzazione delle sessioni è triplice:
- Non è necessario inserire esplicitamente i dati nel database. Basta semplicemente impostare una variabile di sessione e il gioco è fatto. Funzionalmente semplice ea basso rischio.
- Non è necessario gestire il ciclo di vita di una visita dell'utente e del carrello degli acquisti poiché i contenitori / framework lo fanno per te
- Solitamente la pulizia automatica delle vecchie sessioni inattive viene eseguita per te.
Svantaggi dell'archiviazione delle sessioni:
- Affinità di sessione, a meno che non si analizzi la replica
- Nessun failover, a meno che non si analizzi la replica o la persistenza manuale dello stato della sessione su disco, il che può complicarsi.
- Tutte le sessioni devono essere archiviate in memoria. Questo è amplificato se si utilizza la replica.
Vantaggi dell'archiviazione del database:
- Non è necessario preoccuparsi dell'affinità della sessione o della replica dello stato. Puoi eseguire il round robin di tutte le richieste.
- Meno 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 per sempre a meno che tu non abbia una sorta di processo di scadenza.
- Devi trovare un modo per tracciare gli utenti e capire se, per una determinata richiesta, ciò rappresenta una sessione di navigazione esistente o nuova. (sì, probabilmente è facile se si utilizza un cookie, ma come si fa a garantire che due utenti non finiscano con lo stesso ID?).
- Più codice
Non hai menzionato quale piattaforma stai utilizzando. Vorrei cercare un approccio che utilizza una sessione supportata dal database in cui i dati della sessione esistono solo in memoria durante la vita di un ciclo di richiesta / risposta, caricandoli dal database e salvandoli nel database. Questo mi è servito bene in passato.
Vantaggi di una sessione supportata da database:
- Non è necessaria l'affinità del server.
- Facile sulla memoria del server app
- I dati della sessione inattiva / abbandonata vengono ripuliti per te.
- Il ciclo di vita della prima visita dell'utente, la visita ripetuta, la fine della sessione è tutto pensato per te.
- Facile da codificare
Svantaggi di una sessione supportata da database:
- Configurazione: è necessario esaminare il contenitore, che si tratti di PHP, Java EE (Tomcat, Jetty, JBoss, ecc.), Node.js + express.js o quant'altro che supporti questo e fornisca la giusta configurazione.
- Potrebbe essere necessario caricare questo test poiché si stanno aggiungendo 2 operazioni del database per richiesta.
C'è una terza possibilità, che qualcuno ha toccato prima. È possibile saltare del tutto l'uso delle sessioni e utilizzare l'archiviazione sul lato client incorporando tutto in un cookie o nell'archiviazione 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.