2013-08-22 9 views
6

Il modo ideale per memorizzare le informazioni di prodotto nel carrello in asp.net

Sto creando un'applicazione di e-commerce, in cui ho un carrello della spesa.

La mia struttura attuale è, ogni volta che l'utente salva il prodotto, metto il prodotto nel datatable e datatable alla sessione, quindi fino a quando la sessione non è scaduta, l'utente può avere l'elenco che hanno salvato.

Tuttavia, ho aumentato il timeout della sessione a 600 minuti (10 ore), ma la mia preoccupazione è che questo è il miglior approccio per la memorizzazione delle informazioni del carrello degli acquisti, perché se ad esempio 1000 utenti accedono contemporaneamente al sito, ci saranno 1000 sessioni oggetto creato sul server, non peggiorerà le prestazioni del mio sito web.

Non posso archiviarlo nel database perché se l'utente è anonimo non ho la cosa univoca sull'utente, in questo modo, se 1000 utenti accedono al sito, tutti i prodotti verranno uniti, non sarò in grado di recuperare il prodotto salvato dall'utente corrente.

C'è qualche altro approccio migliore per questo problema.

risposta

19

Non si dovrebbe implementare in questo modo. Le sessioni di 10 ore sono molto lunghe, se hai 1000 utenti sul tuo sito web il server ne soffrirà e creerà problemi di prestazioni.

Sui nostri siti di e-commerce creiamo un cookie per utenti anonimi. Dopo aver fatto questo si hanno due soluzioni:

  1. Conservare l'intero paniere in un cookie (in pratica elenco di ID del prodotto + quantità, più a seconda delle esigenze/strategia) o di altre tecniche (per esempio localStorage).
  2. Memorizza un ID univoco nel cookie e memorizza il carrello nel database (tabella temporanea) con l'ID del cookie univoco come identificativo. Una volta che l'utente accede al sistema, sposta tali dati nella tabella del carrello dell'utente.

È possibile modificare facilmente la scadenza dei cookie (o rimuoverli) senza influire sulle prestazioni generali del server. Per gli ID è possibile utilizzare Guid.NewGuid().

UPDATE:

Maggiori dettagli sulla mia seconda soluzione - scenario:

  1. visita il sito dell'utente
  2. Si crea un cookie con una data di scadenza: CARTID con valore Guid.NewGuid() (nome e il valore dipende da te).
  3. utente clicca su "Acquista"
  4. Prendi il lato server biscotto e aggiungete il CARTID, prodotto/quantità alla tabella "AnonymousBasket"
  5. Immaginate l'utente lascia il sito e tornare un mese dopo il cookie essere ancora qui
  6. Se l'utente anonimo va nel suo carrello, è possibile ottenere i suoi prodotti e le quantità in base al valore del cookie.
  7. Se l'utente accede si rimuove il cookie e spostare i dati dalla tabella "AnonymousBasket" a "carrello"
  8. Ora il vostro utente connesso in grado di elaborare alla cassa

Con questa soluzione tutto viene mantenuto nel database e non richiede sessioni.È possibile modificare la scadenza dei cookie come si fa per le sessioni, in alternativa è possibile pulire la tabella temporanea senza alcun rischio o creare statistiche sugli utenti anonimi (perché non hanno proceduto al checkout, quanti elementi in media, quale elemento,. ..).

+0

Hi @glautrou, potrebbe essere la soluzione migliore, ma cosa succede se il cookie è disabilitato sul client. – Abbas

+0

Se i cookie sono disabilitati, è probabile che anche le sessioni siano disabilitate. Se ti preoccupi di disabilitare JavaScript, puoi passare "ID carrello" in tutti i tuoi URL. Questo non è molto bello, ma in questo caso non hai molte scelte. – glautrou

+0

Immagino che i cookie siano archiviati sul lato client e sessioni sul server, quindi l'utente non può disabilitare la sessione dalla fine del browser, poiché risiede sul server. – Abbas

Problemi correlati