asp.net - que - cerrar sesion por inactividad c#
¿Pros y contras de usar el servidor de estado de sesión ASP.NET(en lugar de InProc)? (6)
Aquí está el análisis canónico de los pros y los contras de sus tres opciones, del artículo de Estado de sesión de ASP.NET de Rob Howard:
En proceso El proceso funcionará mejor porque la memoria de estado de la sesión se mantiene dentro del proceso ASP.NET. Para las aplicaciones web alojadas en un solo servidor, las aplicaciones en las que se garantiza que el usuario se redireccionará al servidor correcto, o cuando los datos de estado de la sesión no sean críticos (en el sentido de que se pueden reconstruir o rellenar) , este es el modo a elegir.
Fuera de proceso . Este modo se utiliza mejor cuando el rendimiento es importante, pero no puede garantizar de qué servidor solicitará una aplicación un usuario. Con el modo fuera de proceso, obtiene el rendimiento de la lectura de la memoria y la confiabilidad de un proceso independiente que administra el estado de todos los servidores.
SQL Server . Este modo se utiliza mejor cuando la confiabilidad de los datos es fundamental para la estabilidad de la aplicación, ya que la base de datos se puede agrupar para escenarios de falla. El rendimiento no es tan rápido como fuera de proceso, pero la compensación es el mayor nivel de confiabilidad.
Las opciones fuera de proceso (también conocido como "StateServer") y SQL-Server sobreviven a los reinicios de la aplicación web (incluido el ciclo del grupo de aplicaciones) y hacen que los datos de la sesión estén disponibles para múltiples servidores en un clúster / granja.
Por último, no hace falta decirlo, pero la configuración básica en el proceso es la más fácil de configurar, lo cual es un "pro" significativo en muchos entornos.
Estado de sesión ASP.NET de Tim Sneath : consideraciones de arquitectura y rendimiento agrega información adicional, y el tema de MSDN sobre los modos de estado de sesión es una fuente confiable y actualizada.
Antes de comenzar a usar el servidor Session State con el beneficio de hacer que el estado de sesión sea más sólido en mis aplicaciones en comparación con el estado InProc, me gustaría encontrar una lista de Pros y Contras para la evaluación.
Actualización 1 : ¿También sobre los reciclables de aplicaciones sobrevivientes?
Actualización 2 : ¿Qué pasa con la longevidad de las sesiones y sus finales?
Otra desventaja es que probablemente tendrá un solo punto de falla si realiza 1 servidor de estado remoto en una comunidad. Incluso si no es una granja, aún vale la pena correr localmente solo para sobrevivir a app_pool IMO. Nos quedamos atrapados en la parte serializable, así que ten cuidado.
Además, tenga cuidado con el lanzamiento de Windows Server AppFabric, ya que tendrá un reemplazo de servidor de estado replicado / distribuido. Supuestamente RTM en 1H2010.
State Server es una gran opción (!) Para comenzar. ¿Por qué? Porque significa que su aplicación ahora es compatible con cualquier modo de almacenamiento fuera de proceso.
Si actualmente desarrolla su sitio con InProc
y desea mudarse a StateServer
o SqlServer
más adelante, puede tener problemas con la serialización. No siempre, pero sí sucede.
Algunos ejemplos incluyen (algunos ya mencionados):
- Ops comienza a programar el reciclaje regular del grupo de aplicaciones de IIS sin su conocimiento
- La memoria se está agotando de forma regular
- Trabajará con un equilibrador de carga en producción y no puede garantizar que el mismo sitio web recibirá la misma solicitud.
Por lo tanto, es mejor solucionarlo más pronto que tarde. Es solo un cambio de configuración y un inicio de servicio; ¡Auge!
Lo que también significa "medios" es que si decide ir por una ruta de almacenamiento de sesión completamente diferente, como usar Redis (Distributed Key / Value Store) o RavenDB (Document Database), ya está ordenado.
Realmente es una buena inversión de 1 minuto de trabajo. Ahora está listo para las granjas de servidores web, los equilibradores de carga y cualquier otro sistema de administración de sesiones en el que decida crear un prototipo.
Ventajas:
1. Puede acceder al mismo estado de sesión a través de máquinas.
2. El mismo estado de sesión está disponible después de volver a cargar la app_pool.
Desventajas:
1. Más lento que en el modo de proceso.
2. Todos los objetos en el estado de sesión deben ser serializables.
Yo diría que una de las grandes desventajas de usar In_Proc es que el estado de la sesión puede perderse si se recicla el grupo de aplicaciones o el dominio. Esto puede suceder en cualquier momento, por ejemplo, si el servidor tiene poca memoria, etc. Personalmente nunca confío en la sesión In_Proc para cualquier cosa que no quiera perder. Pasé horas depurando sitios con problemas esporádicos solo para encontrar que era porque el estado de la sesión se estaba perdiendo debido a un servidor con poco reciclaje de recursos (y, por supuesto, cuanto más almacene en la sesión, más bajos serán los recursos del servidor. recuerde, si puede salir mal, entonces probablemente saldrá mal en algún momento.
Es por eso que ahora normalmente uso State Server para cualquier cosa que no sean datos de sesiones triviales. La única desventaja real que he encontrado es que necesitas marcar las clases como serializables, pero esto generalmente es trivial. También es un poco más lento, pero eso es despreciable en la mayoría de los casos.
Hay un buen artículo sobre esto en el blog IIS MSDN.
Desventajas de las sesiones en ASP.NET
Cada variable se almacena como Objeto. Eso significa que necesita convertir Objeto a cierto tipo cuando lea la variable de sesión.
Además de esto, si la sesión está vacía, el objeto será nulo. Antes de leer la variable de sesión, necesita verificarla para nula. Incluso si la variable se inicializó antes, podría ser nula porque la sesión ha caducado. Un intento de utilizar el valor de sesión nula podría devolver una excepción. Si el valor de la variable de sesión es nulo, la práctica común es usar algún valor predeterminado en lugar de nulo sin sentido. Si el valor no es nulo, debe convertirlo al tipo apropiado porque todas las variables de sesión son tipo de objeto. Cuando haga todas estas cosas, debe prestar atención para evitar la codificación difícil. Más acerca de la lectura y escritura de variables de sesión de manera escalable y mantenible, puede leer en el tutorial Cómo Escribir, Leer y Eliminar Variables de Estado de Sesión.
El nombre de la variable es el tipo de cadena. Si tiene el nombre de código de la variable, hay una opción para cometer errores de tipo en algún lugar. El problema es que, si intenta leer la variable de sesión que no existe, ASP.NET no devolverá ninguna excepción o advertencia. Simplemente creará una nueva variable con un nombre incorrecto que tiene un valor nulo. Estos tipos de errores pueden ser difíciles de encontrar.
Los datos de sesión no deben utilizarse para almacenar datos confidenciales. Existe la posibilidad de que un usuario malintencionado obtenga el ID de sesión del visitante habitual. Si el estado de sesión se utiliza para almacenar información como: "permitir el acceso al área de administración o no" o algo así, el atacante podría ver los datos confidenciales del sitio web, los datos privados de otros, editar la base de datos, eliminar contenido, etc.
Si se usa el modo InProc, las sesiones agotan fácilmente todos los recursos del servidor y, por lo tanto, disminuyen el rendimiento del sitio web.
StateServer
SQL Server es el más confiable de todos los modos. Los datos de sesión están intactos si se reinicia ASP.NET, pero también si se reinicia SQL Server.
SQL Server es también la opción más escalable.
SQL Server a menudo está disponible en el escenario de alojamiento compartido
Modo personalizado
Tienes control completo sobre las sesiones. Es posible crear incluso ID de sesión personalizada.
Puede soportar diferentes fuentes de datos. Eso podría ser útil para almacenar datos de sesión en otra base de datos, como Oracle, MySQL, MS Access, etc.
Para cualquier otro detalle, puede hacer clic aquí para ver las ventajas del estado de sesión de ASP.NET . Espero que mi respuesta te haya ayudado. :)