2010-12-02 40 views

Répondre

4

script côté client:

< body onbeforeunload="window.open('http://www.website.com/browserclosed.aspx','mywindow','width=1,height=1');"> 

script côté serveur (browserclosed.aspx):

// page_load 

int userId = Convert.ToInt32(request.session("userId")); 
ReportBrowserClosed(userId); 
// Do what you want in ReportBrowserclosed() method 
9

Réponse courte: vous ne pouvez pas faire cela directement puisque http est sans état. Peut-être que vous pouvez utiliser un pool de hearbeat AJAX, détection de délai d'attente de session et d'autres astuces.

Jetez un oeil à this question pour plus d'explications et d'idées. C'est basé sur Java, mais les idées sont agnostiques.

0

La première chose qui vient à l'esprit est que vous connectez l'événement unload et que vous affichez de façon asynchrone que le navigateur a quitté votre site (fermeture de la fenêtre). Cependant, la façon dont HTTP est utilisé pour créer des sites Web sans état rend cela irréalisable. Vous n'avez tout simplement pas un moyen fiable de suivre la connectivité des utilisateurs.

Considérez comment géreriez-vous plusieurs sessions? Si j'ai le même site ouvert dans beaucoup et plusieurs, onglets ou fenêtres et fermer tous sauf un, comment dites-vous que je suis toujours connecté? Et pour le plaisir, dites que mon navigateur s'est écrasé quelque part entre les deux. En fait, je pourrais concevoir quelque chose qui résoudrait en quelque sorte votre problème. Cependant, il ne sera jamais fiable car HTTP n'a pas de mécanisme de contrôle intégré pour la connectivité.

Je dois répondre à cette question, avec une question de suivi. Pourquoi avez-vous besoin de savoir quand la fenêtre du navigateur se ferme?

Si vous avez besoin de faire un nettoyage des ressources, il y a deux événements côté serveur, facilités par ASP.NET et que vous pouvez utiliser de manière plus fiable. Et c'est Session_End ou Application_End.

+0

Je ne peux pas répondre pour l'OP, mais une raison commune à faire est d'arrêter un opération de longue durée (requête, génération de rapport, etc.) lorsque l'utilisateur abandonne et ferme son navigateur. – Gabe

0

La question évidente est pourquoi avez-vous besoin de cela? Voulez-vous stocker l'heure de déconnexion ou l'heure de fermeture? Ensuite, il est préférable d'attraper le délai d'expiration de la session. Voulez-vous rediriger une autre page, alors il est préférable d'attraper l'événement de déchargement de page de javascript.