ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

El otro día un compañero me comentó:

Luis, estamos desarrollando una aplicación Web y como Session State Mode estamos utilizando InProc, pero no sabemos sí esta va a ser la configuración final. ¿Que debemos tener en cuenta en el desarrollo para que esta modificación no nos afecte?

A lo que le respondí:

¿Sabes cual es la diferencia entre los distintos Session State Mode?

El respondió:

No muy bien, te importaría explicarmelo.

ASP.NET soporta 5 tipos diferentes para el almacenamiento de la sesión:

  1. InProc: Es el modo por defecto. El estado de la sesión se almacena en la memeria del servidor web y es el que ofrece mejor rendimiento, pero como desventajas se pueden destacar  que no se persiste si reinicias la aplicación web o a traves varios servidores(Web Farm).
  2. State Server: El estado de la sesión se almacena en un servicio llamado ASP.NET State Service y el estado de la sesión persiste aunque reinicies la aplicación o a traves de varios servidores (Web Farm) pero ofrece menor rendimiento que el modo InProc
  3. SQL Server: El estado de la sesión se almacena en una base de datos de SQL Server. En las mismas condiciones de Hardware, ofrece menor rendimiento que State Server pero ofrece una mejor integridad de los datos y reporting.
  4. Custom: Permite especificar tu propio proveedor de almacenamiento de la sesión, eso sí, necesitas implentarlo tú.
  5. Off: Deshabilitar el estado de la sesión. Si en tu aplicativo no usas sesión, deshabilitalo para un mejor rendimiento.

Ahora me queda más claro, pero no has respondido a mi pregunta, ¿En que me afecta al desarrollo una u otra?

Pues la suerte que tenemos los desarrolladores es que es transparente en nuestro desarrollo que una vez puesta en producción un adminsitrador o nosotros mismos modifiquemos el Session State Mode, eso sí, siempre y cuando no lo deshabilitemos, porque no podremos utilizar variables de sesión y eso si nos condicionará el desarrollo.

¿Y que pasa si se deshabilita y en mi aplicación estoy trabajando con variables de Sesión?

Pues que ASP.NET cantará:

Sólo puede utilizar el estado de sesión cuando enableSessionState está establecido como true, en un archivo de configuración o en la directiva de la página

Muchas gracias Luis

Espero que os haya servido como a mi amigo ;)

Salu2

Published 26/6/2007 11:53 por Luis Ruiz Pavón
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/06/26/asp-net-almacenamiento-del-estado-de-la-sesi-243-n-session-state-mode.aspx

Comentarios

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Luis, también debes comentarle la nueva alternativa a parte de sesión en ASP.NET 2.0, es decir Profiles, que sería un Session State, en modo SQL Server.

Saludos,

Wednesday, June 27, 2007 8:07 AM por sergiotarrillo

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Recuerden que cuando usamos la session en StateServer o SqlServer no podremos almacenar objetos que no sean serilizables como dataview entre otros!!!

Friday, June 29, 2007 4:15 AM por jumper

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Hola compañeros,

Mi problema es que tengo varias apliciones web .NET en distintos proyectos. Deseo realizar el típico 'Cerrar Sesion' pero las variables de sesión en las que guardo el identificador de la persona solo se conservan en cada proyecto, por lo que al eliminar las sesiones en una aplicación solo se eliminan las de un solo proyecto. Estoy intentando guardar las sesiones en SQL para poder compartirlas entre proyectos. He creado la base de datos ASPState mediante ASPNET_REGSQL.EXE, he añadido la etiqueta <sessionState> en el Web.Config y no he modificado nada en la asignación o lectura de las variables de sesión. Me añade registros en la base de datos al realizar la asignación de valor a las variables de sesión pero al ir a obtener su valor en el segundo proyecto me devuelve valor nothing. ¿Sabéis porque puede ser? ¿Hay que realizar algún paso más? ¿Es válido el almacenamiento en SQL Server para compartir variables de sesión entre proyectos?

Os pongo el código de sessionState:

<sessionState

mode="SQLServer"

stateConnectionString="tcpip=192.168.0.1:42424"

sqlConnectionString="data source=anlnsrv02; user=usuario; password=contrasena">

</sessionState>

Muchas gracias por todo.

Wednesday, September 12, 2007 9:23 AM por ganbuski

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Yes I agree with you!

Thursday, December 04, 2008 4:46 AM por cialis pharmacy us

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Buena explicacion, pero podrias poner un ejemplo sobre como quedaria el Web.config y como accedo a las variables de sesion despues desde otras paginas.aspx???

Muchas gracias

Tuesday, December 16, 2008 7:40 PM por Nico

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Una pregunta acerca de las variables de session, tengo un sitio con archivos asp y aspx, el problema q tengo es q las variables de session se me pierden cuando las quiero recuperar con el archivo aspx, como puedo recuperarlas, me podrian ayudar?

Saturday, January 10, 2009 9:24 PM por Jesus

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Hola a Luis y a todos. Tengo una aplicacion en VS 2003 bajo el Fw 1.1. Esta aplicacion la migré a VS 2008 Fw 3.5 y todo bien excepto por el mensaje de error que sale despues del tercero y cuarto PostBack, "La información de estado de la sesión no es válida y podría estar dañada". Mi sessionState mode="StateServer" y necesito mantenerlo asi. Agradeciendo de antemano ayuda, Andres

Thursday, February 19, 2009 9:30 PM por aespada@imbanaco.com.co

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Hola:

Aquí tienes un KB que te puede ser muy util:

support.microsoft.com/.../es

Salu2

Monday, February 23, 2009 9:21 AM por Luis Ruiz Pavón

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

creo que tengo el mismo problema sin solucion aun ,

tengo dos aplicaciones distintas

bajo el mismo servidor

y necesito conpartir las variables de session

entre ellas.

he configurado el web.config  

mode="StateServer"

stateConnectionString="tcpip=127.0.0.1:42424"

pero no puedo obtener la variable de session creada en aplicacion1 desde la aplicacion2

ejem .

aplicacion 1

session ("variable", 1) ' creo la variable

aplicacion 2

valor= session.item("var") ' capturo en aplicacion 2

pero viene el valor vacio.  

ayuda pleasee..!!!!

Tuesday, August 11, 2009 11:38 PM por mandar1n@hotmail.com

# ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Muy buenas,

Dado que veo que tienen conocimientos sobre estados de sesión, me gustaría comentarles una cosa, a ver si me pueden ayudar.

Tengo una aplicación web en C#, funciona todo bien, y ningun problema, excepto cuando el usuario quiere abrise la aplicación en dos pestañas del IE7/8, o inclusive dos internet explorer diferentes, ya que si hacen eso...la segunda session que inician machaca a la primera...y en conclusión, únicamente pueden trabajar con una ventana.

Tengo configurado de la siguiente manera la session:

sessionState mode="StateServer" timeout="30" stateConnectionString="tcpip=192.168.1.2:42424" stateNetworkTimeout="1"

con identity ->impersonate a true, por si tiene algo que ver...

no se.estoy desesperado...aver si me pueden ayudar...

GRACIAS!!!

Thursday, November 05, 2009 8:34 AM por Seth

# re: ASP.NET: Almacenamiento del estado de la sesión (Session State Mode)

Por que NO PUEDO INICIAR CESION

INICIO PERO LUEGO SE SALE Y OTRA VEZ AHI QUE INICIAR

Y ASI SUSESIVAMENTE POR FAVOR ME PODRIAS AYUDAR GRACIAS POR TU COMPRENSION Y HAMABILIDA

Thursday, December 03, 2009 6:25 PM por anthony

# seolace

Nice post, thanks for writing!

Thursday, May 06, 2010 5:48 PM por seolace