Eventos de Estado de Sessão

ASP.NET fornece dois eventos que ajudam você a gerenciar sessões de usuário: the Session_OnStart evento, que é disparado quando uma nova sessão é iniciada, e o Session_OnEnd evento é disparado quando uma sessão é abandonada ou expira.

Observação:

Se o arquivo Global.asax ou arquivo Web.config para um aplicativo ASP.NET for modificado, o aplicativo será reiniciado.Se o modo de estado da sessão corrente for InProc, os valores armazenados no estado de sessão ou do aplicativo serão perdidos. Esteja ciente que alguns softwares de antivírus podem atualizar a data e hora da última alteração do arquivo Global.asax ou Web.config para um aplicativo.Para informações sobre como definir o modo de estado de sessão, consulte Modos de estado de sessão.

O Evento Session_OnStart

Você pode manipular o evento Session_OnStart adicionando uma sub-rotina chamada Session_OnStart ao arquivo Global.asax.A sub-rotina Session_OnStart é executada no início de uma solicitação, se a solicitação começa uma nova sessão.Uma nova sessão será iniciada se for feita uma solicitação que não contenha um valor SessionID ou se a propriedade SessionID contida na solicitação faz referência a uma sessão que expirou.

Você pode usar o evento Session_OnStart para inicializar variáveis da sessão bem como para controlar informações relacionadas à sessão.

O evento Session_OnEnd

Você pode manipular o evento Session_OnEnd adicionando uma sub-rotina chamada Session_OnEnd ao arquivo Global.asax.A sub-rotina Session_OnEnd é executada quando o método Abandon tiver sido chamado ou quando a sessão tiver expirado.Uma sessão expira quando o número de minutos especificado pela propriedade Timeout passa sem uma solicitação ser feita para a sessão.

O evento Session_OnEnd é suportado apenas quando a propriedade Mode do estado de sessão estiver definida como InProc, a qual é o padrão.Se o estado de sessão Mode é StateServer ou SQLServer, em seguida, o evento Session_OnEnd no arquivo Global.asax será ignorado.Se o estado de sessão Mode é definido como Custom, em seguida, o suporte para o evento Session_OnEnd será determinado pelo provedor de armazenamento de estado de sessão personalizado.

Você pode usar o evento Session_OnEnd para limpar informações relacionadas à sessão como informações para um usuário que é controlado pelo valor SessionID em um fonte de dados.

Exemplo de Eventos de Sessão

O exemplo de código a seguir mostra um exemplo de sub-rotinas Session_OnStart e Session_OnEnd, que você pode adicionar ao arquivo Global.asax.As sub-rotinas definidas neste exemplo criam um contador que mantém controle do número de usuários do aplicativo usando ativamente o aplicativo.Observe que esse exemplo irá funcionar adequadamente apenas quando a propriedade Mode do estado de sessão é definida como InProc, como o evento Session_OnEnd só é suportado para armazenamento de estado da sessão em processo.

<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>

Consulte também

Conceitos

Visão geral sobre Estado de sessão ASP.NET

Visão Geral sobre o Gerenciamento de Estado do ASP.NET