La seule façon de faire quelque chose lorsque la page est fermée ou naviguée est d'attacher un gestionnaire d'événements à l'événement de déchargement, comme le suggère Rocket. Cependant, vous ne devriez pas compter sur cet événement pour le déclencher, car beaucoup de choses peuvent l'empêcher. Le navigateur peut l'arrêter pour concentrer ses ressources sur d'autres tâches, l'utilisateur peut perdre sa connexion, le navigateur peut être arrêté, etc.
Le moyen le plus fiable de suivre les utilisateurs et les sessions consiste à leur faire envoyer des messages keepAlive au serveur à un intervalle donné. Vous saurez alors que l'utilisateur est parti entre un horodatage donné et l'intervalle du message keepAlive.
Sur le serveur, vous pouvez ensuite parcourir les sessions qui n'ont pas été maintenues en vie pendant un certain temps et effectuer toute opération dont vous avez besoin.
Cependant, cette approche ne sera pas nécessaire si vous avez seulement besoin de créer un effet de "déconnexion" sympa.