Il n'y a aucun événement côté serveur qui est soulevée lorsqu'une page est laissée/fermée. De même, l'événement Session_End (mentionné dans les autres réponses) n'est pas appelé lorsqu'une page est laissée, puisque l'utilisateur peut naviguer vers d'autres pages de la même application web (et donc la session continuera à exister).
Je peux penser à 3 voies possibles pour résoudre (ou contourner) cette question:
- utiliser ViewState pour stocker des données avec la page-portée. C'est ce que ViewState est fait, et à moins d'avoir beaucoup de données, cela ne devrait pas poser de problème. Si vous avez beaucoup de données, n'oubliez pas qu'elles seront sérialisées/désérialisées et envoyées au client/retournées au serveur pour chaque requête (ce qui peut entraîner des demandes importantes et donc de mauvaises performances).
- au lieu de mettre les données dans la session, le mettre dans le cache (avec un délai d'expiration à faible glissement). Sur votre page, vous pouvez accéder à vos données de la même manière qu'à partir de la session, par exemple data = Cache ["data"], mais vous devez vous préparer à ce que les données soient retirées du cache (vous devez le recharger encore à partir de DB par exemple), si le temps entre deux demandes était plus grand que le temps d'expiration.
- utiliser le client-side (javascript) onUnload événement, et déclencher une action (par exemple un rappel Ajax) pour supprimer les données de la session. Mais je pense que l'événement onUnload n'est pas fiable (il ne sera pas déclenché dans tous les cas, par exemple lorsque le navigateur est arrêté par un crash ou avec le gestionnaire de tâches, ou si javascript est désactivé).
Pour ViewState: parfois il y a beaucoup de données car parfois l'objet de traitement contient ses données et ses données de détails pour Cache, je ne sais pas sur ses performances par rapport à viewstate ou session. Pour un événement de déchargement, quels sont vos doutes. – Ahmed
onUnload est incohérent, il n'est pas sûr qu'il se déclenche si le navigateur tombe en panne ou s'il y a quelque chose comme un arrêt du navigateur. Cela dit, c'était la solution que nous avons utilisée dans un projet récent, j'ai été impliqué dans –
ci-dessus je voulais dire "force d'arrêt" où vous lisez "arrêt du navigateur" –