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>