2012-02-02 12 views
7

¿Hay alguna manera de borrar una clave de caché de sesión para todos los usuarios?¿Hay alguna manera de borrar una clave de caché de sesión para todos los usuarios?

Por ejemplo, estoy almacenando los artículos de tienda actualmente seleccionados bajo la siguiente clave de sesión "currentItem". En el área de administración del sitio web, decido eliminar ese artículo de la tienda en particular. Ahora quiero invalidar todas las entradas de la memoria caché "currentItem" en todas las sesiones.

¿Hay alguna manera de hacerlo?

Me doy cuenta de que el ejemplo que he dado es un poco artificial, pero hace entender el punto. Sospecho que una solución sería usar la api de caché normal para almacenar todos los elementos actuales de los usuarios. De esa manera podría invalidarlos cuando sea necesario.

gracias

Respuesta

3

no se puede conseguir todas las sesiones actuales de todos los usuarios
(Francamente, you can, pero no recomiendo esto, y todavía se puede leer solamente InProc sessions esta manera).

Así que lo único que puede hacer es algo como esto:

  • tienda en Session única ID del carro de usuario
  • añadir el artículo con la correspondiente ID a la caché de
  • A continuación, añadir el artículo a el Cache, establezca el dependency to the Item
  • Luego solo genere el evento para cambiar los carritos enteros en Cache.
  • También debe pensar en volver a crear elementos si por alguna razón se está vaciando Cache; debe proporcionar el CacheItemRemovedCallback callback para este evento.
+1

+1 Puedes probar [esto] (http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx) para obtener todas las sesiones, pero lo haría prefiere cualquier otro enfoque. –

+0

@TimSchmelter Esto solo puede funcionar con las sesiones 'InProc' – VMAtm

+0

Sí, por supuesto, esa es una razón por la que no confiaría en ella si no fuera necesario. –

0

Puede mover el carrito de compras a la base de datos. A menos que tenga un proceso de compra muy rápido o un entorno extremadamente redundante, Session o Cache probablemente no sean lo suficientemente duraderas. Como no persisten, tampoco tendrá un método directo para analizar decisiones de compra, desgaste, etc.

Dependiendo de la frecuencia con la que cambie su inventario, es posible que solo necesite validar que un artículo está disponible en la facturación . Como usuario, me resultaría muy confuso ver que un artículo había desaparecido "mágicamente" de mi carrito o que el precio había cambiado. Sería mejor llamarlo explícitamente, en mi opinión.

Una vez más, una base de datos sería una solución superior, ya que podría rastrear el estado del artículo en el momento en que se agregó al carro contra la definición actual del producto.

Si debe utilizar una solución basada en la sesión o la caché, la solución propuesta de @VMAtm es una opción válida.

+0

Gracias Tim. El ejemplo que di no es real para mí. No tengo un carrito de compras, ni siquiera una tienda. Fue solo para fines ilustrativos. Pero entiendo todos tus puntos. Gracias – gregpakes

Cuestiones relacionadas