2011-03-31 22 views
5

He leído que se puede almacenar clases directamente en una variable de sesión es decirASP.NET - Almacenamiento de clases en variables de sesión - ¿Cómo funciona (memoria)?

Session["var"] = myclass; 

Mi pregunta es cómo funciona la gestión de memoria. ¿Se serializa automáticamente esto en la sesión en el lado del cliente?

¿O tiene los datos para la instancia de la clase en la memoria del servidor, y solo contiene una referencia en el objeto de sesión?

+1

La sesión no tiene nada que ver con el cliente. – SLaks

Respuesta

12

ASP.Net almacenará su objeto en un diccionario anidado static en la memoria en el servidor.
Luego envía una cookie al cliente con la ID de la sesión.

La próxima vez que el cliente envíe una solicitud, ASP.Net recuperará la sesión asociada con esa ID del diccionario externo y luego le proporcionará el diccionario interno que contiene los objetos en esa sesión.

(Esta es la forma en que funciona el proveedor predeterminado de la sesión; otros proveedores pueden serializar objetos a SQL Server, o hacer algo completamente distinto)

+1

En realidad, esto solo es cierto cuando se usa el proveedor predeterminado de la tienda de sesiones, también se puede usar SQL Server para almacenar datos de sesión para compartirlos en los procesos de trabajo o incluso en las máquinas. – ntziolis

+0

Sí; esa es una característica más avanzada. – SLaks

5

No almacena clases en la sesión sino instancias de estas clases. Y sí, el almacén de sesión predeterminado es la memoria. Sin embargo, puede usar SQL Server como almacén de sesiones. Entonces se llevará a cabo una serialización.

Los datos de la sesión son no disponibles en el lado del cliente.

1

Depende de cómo usted tiene sesiones establecidas en ASP.NET. El valor predeterminado es que la sesión reside en la memoria del servidor, y es básicamente solo un diccionario. El usuario recibe una cookie de sesión que se utiliza para identificar cuál de estos diccionarios de sesión capturar para una solicitud determinada (un diccionario de sesión por usuario)

El objeto nunca se envía al cliente porque el cliente solo tiene una cookie, y las cookies son demasiado pequeñas para contener gran parte de cualquier cosa, y además de enviar un objeto al cliente es probable que sea un problema de seguridad.

Puede configurar ASP.NET para utilizar una base de datos en lugar de la memoria para almacenar la sesión, es decir detallada here

1

El almacén de sesión predeterminada está en la memoria. Cuál es el más fácil de usar porque los objetos no necesariamente tienen que ser serializables.

Si ha cambiado el almacén de sesiones a permite decir la base de datos SQL SERVER. Entonces, todos los objetos que almacene en la sesión necesitarán ser serializables o arrojarán una excepción.

Su sesión por defecto solo dura 20 minutos. Puede cambiar esto en el archivo web.config para que sea el tiempo que desee. Pero después de ese tiempo, la recolección de basura lo eliminará de la memoria.

Cuestiones relacionadas