2012-02-02 12 views
7

C'è un modo per cancellare una chiave di cache di sessione per tutti gli utenti?C'è un modo per cancellare una chiave di cache di sessione per tutti gli utenti?

Ad esempio, sto memorizzando l'elemento negozio attualmente selezionato dall'utente sotto il seguente tasto di sessione "currentItem". Nell'area di gestione del sito Web, decido di eliminare quel particolare articolo del negozio. Ora voglio invalidare tutte le voci della cache "currentItem" in tutte le sessioni.

C'è un modo per farlo?

Mi rendo conto che l'esempio che ho dato è un po 'forzato, ma ha il significato. Sospetto che una soluzione sarebbe quella di utilizzare la normale cache Cache per memorizzare tutti gli elementi correnti degli utenti. In questo modo ho potuto invalidarli quando richiesto.

grazie

risposta

3

Non è possibile ottenere tutte le sessioni correnti di tutti gli utenti
(francamente, you can, ma non ha raccomandato questo, e ancora si può leggere solo InProc sessions questo modo).

Quindi l'unica cosa che puoi fare è qualcosa di simile:

  • Conservare in Session solo ID dell'utente carrello
  • Aggiungi elemento con corrispondente ID alla cache
  • Poi aggiungere l'articolo alla Cache, impostare dependency to the Item
  • Quindi generare l'evento per modificare interi carrelli in Cache.
  • Inoltre, dovresti pensare a ricreare gli articoli se per alcuni motivi Cache viene svuotato - per questo evento devi fornire lo CacheItemRemovedCallback callback.
+1

+1 Puoi provare [this] (http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx) per ottenere tutte le sessioni, ma vorrei preferisco qualsiasi altro approccio. –

+0

@TimSchmelter Questo può funzionare solo con le sessioni 'InProc' – VMAtm

+0

Sì, certo, questo è uno dei motivi per cui non mi affiderei se non dovessi farlo. –

0

È possibile spostare il carrello acquisti nel database. A meno che tu non abbia un processo di acquisto molto rapido, o un ambiente estremamente ridondante, Session o Cache probabilmente non saranno abbastanza durevoli. Dal momento che non sono persistenti, non avrai un metodo diretto per analizzare le decisioni di acquisto, il logoramento, ecc.

A seconda della frequenza con cui il tuo inventario cambia, potresti solo aver bisogno di verificare che un articolo del carrello sia disponibile al momento del pagamento . Come utente, sarebbe molto confuso per me vedere che un oggetto era semplicemente "magicamente" scomparso dal mio carrello o che il prezzo era cambiato. Sarebbe meglio chiamarlo esplicitamente, secondo me.

Ancora una volta, un database sarebbe una soluzione superiore in quanto è possibile tenere traccia dello stato dell'articolo nel momento in cui è stato aggiunto al carrello rispetto alla definizione corrente del prodotto.

Se è necessario utilizzare una soluzione basata su Session o Cache, la soluzione proposta da @ VMAtm è un'opzione valida.

+0

Grazie Tim. L'esempio che ho dato non è per me reale. Non ho un carrello della spesa, o anche un negozio per quella materia. Era solo a scopo illustrativo. Ma capisco tutti i tuoi punti. Grazie – gregpakes

Problemi correlati