Eventos de estado de sesión

Actualización: noviembre 2007

ASP.NET proporciona dos eventos que ayudan a administrar las sesiones de usuario: los eventos Session_OnStart, que se desencadena cuando comienza una nueva sesión, y Session_OnEnd, que se desencadena cuando se abandona o expira una sesión.

Nota:

Si se modifican los archivos Global.asax o Web.config de una aplicación ASP.NET, se reiniciará la aplicación. Si el modo de estado de sesión actual es InProc, se perderá cualquier valor almacenado en el estado de la aplicación o en el estado de la sesión. Tenga en cuenta que algunos programas antivirus pueden actualizar la fecha y la hora de la última modificación de los archivos Global.asax o Web.config de una aplicación. Para obtener información sobre la configuración del modo de estado de sesión, vea Modos de estado de sesión.

Session_OnStart (Evento)

Puede controlar el evento Session_OnStart agregando una subrutina denominada Session_OnStart al archivo Global.asax. La subrutina Session_OnStart se ejecuta al principio de una solicitud si ésta inicia una nueva sesión. Se iniciará una nueva sesión si se crea una solicitud que no contenga ningún valor SessionID o si la propiedad SessionID incluida en la solicitud hace referencia a una sesión expirada.

Puede utilizar el evento Session_OnStart para inicializar las variables de sesión, así como para realizar el seguimiento de la información relacionada con la sesión.

Session_OnEnd (Evento)

Puede controlar el evento Session_OnEnd agregando una subrutina denominada Session_OnEnd al archivo Global.asax. La subrutina Session_OnEnd se ejecuta cuando se llama al método Abandon o cuando la sesión ha expirado. Una sesión expira cuando el número de minutos especificado por la propiedad Timeout transcurre sin que se haya creado ninguna solicitud para la sesión.

Sólo se admite el evento Session_OnEnd cuando la propiedad del estado de sesión Mode se establece en InProc, que es el valor predeterminado. Si el estado de sesión Mode es StateServer o SQLServer, se omite el evento Session_OnEnd en el archivo Global.asax. Si el estado de sesión Mode se establece en Custom, el proveedor personalizado del almacén de estado de sesión determina la compatibilidad del evento Session_OnEnd.

Puede utilizar el evento Session_OnEnd para limpiar la información relacionada con la sesión, como la información de un usuario de la que el valor SessionID está realizando el seguimiento en un origen de datos.

Ejemplo de eventos de sesión

En el código siguiente se muestra un ejemplo de las subrutinas Session_OnStart y Session_OnEnd que se pueden agregar al archivo Global.asax. Las subrutinas definidas en este ejemplo crean un contador que realiza el seguimiento del número de usuarios de la aplicación que utilizan dicha aplicación de forma activa. Observe que este ejemplo sólo funcionará correctamente cuando la propiedad de estado de sesión Mode se establezca en InProc, ya que el evento Session_OnEnd sólo es compatible con el almacén de estado de sesión en proceso.

<script language="VB" >
Public Sub Application_OnStart()
  Application("UsersOnline") = 0
End Sub

Public Sub Session_OnStart()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
  Application.UnLock()
End Sub

Public Sub Session_OnEnd()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
  Application.UnLock()
End Sub
</script>
<script language="C#" >
public void Application_OnStart()
{
  Application["UsersOnline"] = 0;
}

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}
</script>

Vea también

Conceptos

Información general sobre el estado de sesión de ASP.NET

Información general sobre la administración de estados de ASP.NET