Até onde eu sei, você não pode realmente testar o fechamento do navegador; você só pode testar se uma janela (ou guia) está sendo fechada. Isso geralmente é suficiente, a menos, é claro, que uma atualização de página aconteça, pois conta como fechar e reabrir uma página da Web dentro de uma janela ou guia. O que é necessário é um manipulador de eventos para um clique no botão de atualização de página do navegador, mas não tenho certeza se existe. Aqui está algo:
Como mostrar a mensagem "Tem certeza de que deseja sair desta página?" quando as alterações foram confirmadas?
e também
Gerenciando evento de fechamento do navegador e atualização de página
Uma coisa que encontrei ao tentar encontrar algo sobre um manipulador de eventos de atualização de página é a noção de usar "armazenamento local". Você pode, como parte do manipulador antes do descarregamento, colocar um pequeno item de dados, com carimbo de data/hora, no armazenamento local. Ative uma espécie de timer no Servidor, e espere esse tempo expirar antes de apagar a sessão. Quando sua página for carregada, teste o armazenamento local para esse item de dados. Se existir e o carimbo de data/hora for muito recente, você sabe que a página foi atualizada e pode fazer as coisas apropriadas com base nisso -- como enviar uma mensagem AJAX para o servidor dizendo para não apagar a sessão ainda.