Muitos interceptam o fechamento do navegador para finalizar alguma tarefa no servidor. A mais comum delas é “matar” a sessão do usuário, evitando que a mesma espere o timeout para ser removida da memória. Sendo assim, é necessário que voce invoque um método server-side para isso.
Uma alternativa é, no evento onUnload do JavaScript, abrir uma pop-up, apontando para uma página ASPX que, em seu evento Load, chame o método Abandon, remover individualmente cada uma delas ou fazer qualquer outro tipo de finalização. O problema desta técnica é com relação aos bloqueadores de pop-up que muitos navegadores possuem e, com essa funcionalidade habilitada, a abertura da janela de finalização não seria possível.
Sendo assim, podemos utilizar o Client Side Callbacks do ASP.NET 2.0 para isso. O código para isso, ficaria mais ou menos como:
public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsCallback && Request.Browser.SupportsCallback)
{
string funcaoJS = this.ClientScript.GetCallbackEventReference(
this,
“””,
“””,
“””,
“””,
true);
body.Attributes.Add(“onUnload”, funcaoJS);
}
//Adicionando Informações a uma Dummy Session
HttpContext.Current.Session[“Dummy”] = “IsraelAece”;
}
public string GetCallbackResult() { return “”; }
public void RaiseCallbackEvent(string eventArgument)
{
HttpContext.Current.Session.Remove(“Dummy”);
}
}
Isso fará com que um trecho de código JavaScript seja embutido no cliente e, quando o evento onUnload ocorrer, o método será disparado removendo/executando o código para remoção de informações pertinentes ao usuário corrente.